欢迎访问悦橙教程(wld5.com),关注java教程。悦橙教程  java问答|  每日更新
页面导航 : > > 文章正文

设计模式入门学习之享元模式实例讲解,设计模式实例讲解

来源: javaer 分享于  点击 6599 次 点评:94

设计模式入门学习之享元模式实例讲解,设计模式实例讲解


享元模式:以共享的方式高效的支持大量的细粒度对象

我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在Java中你觉得是new几千次咖啡好还是new几十次口味好呢?享元模式就是利用的这个原理来共享的变量了。

来看一下类图:

\

FlavorFactory:口味工厂,根据客户所需口味生产咖啡

Client:售货员,负责通知工厂生产咖啡,以及出售咖啡和统计销售情况

Coffee:咖啡接口

Flavor:咖啡口味,实现了咖啡接口,并且持有一个口味属性,记录此咖啡的口味。

来看一下代码

public interface Coffee {
    public String getFlavor();
}

public class Flavor implements Coffee {
    private String flavor;
    Flavor(String flavor){
        this.flavor=flavor;
    }
    @Override
    public String getFlavor() {
        return this.flavor;
    }
}

public class FlavorFactory {
    private Map flavorMap=new HashMap<>();

    public Coffee getCoffee(String flavor) {
        if(flavorMap.get(flavor)!=null){
            flavorMap.put(flavor,new Flavor(flavor));
        }
       return flavorMap.get(flavor);
    }
    public int flavorNum(){
        return flavorMap.size();
    }
}

public class Client {
    private int coffeeNum;
    private FlavorFactory flavorFactory;
    Client(FlavorFactory flavorFactory){
        this.flavorFactory=flavorFactory;
    }
    public void sell(String flavor){
        flavorFactory.getCoffee(flavor);
        coffeeNum++;
    }
    public void statistics(){
        System.out.println("共卖出咖啡"+coffeeNum+"杯");
        System.out.println("共卖出风味"+flavorFactory.flavorNum()+"种");

    }
}

其实大家看了代码就明白了享元模式的核心思想,那就是重复利用以及存在的对象

享元模式:以共享的方式高效的支持大量的细粒度对象

我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在Java中你觉得是new几千次咖啡好还是new几十次口味好呢?享元模式就是利用的这个原理来共享的变量了。

来看一下类图:

\

FlavorFactory:口味工厂,根据客户所需口味生产咖啡

Client:售货员,负责通知工厂生产咖啡,以及出售咖啡和统计销售情况

Coffee:咖啡接口

Flavor:咖啡口味,实现了咖啡接口,并且持有一个口味属性,记录此咖啡的口味。

来看一下代码

public interface Coffee {
    public String getFlavor();
}

public class Flavor implements Coffee {
    private String flavor;
    Flavor(String flavor){
        this.flavor=flavor;
    }
    @Override
    public String getFlavor() {
        return this.flavor;
    }
}

public class FlavorFactory {
    private Map flavorMap=new HashMap<>();

    public Coffee getCoffee(String flavor) {
        if(flavorMap.get(flavor)!=null){
            flavorMap.put(flavor,new Flavor(flavor));
        }
       return flavorMap.get(flavor);
    }
    public int flavorNum(){
        return flavorMap.size();
    }
}

public class Client {
    private int coffeeNum;
    private FlavorFactory flavorFactory;
    Client(FlavorFactory flavorFactory){
        this.flavorFactory=flavorFactory;
    }
    public void sell(String flavor){
        flavorFactory.getCoffee(flavor);
        coffeeNum++;
    }
    public void statistics(){
        System.out.println("共卖出咖啡"+coffeeNum+"杯");
        System.out.println("共卖出风味"+flavorFactory.flavorNum()+"种");

    }
}

其实大家看了代码就明白了享元模式的核心思想,那就是重复利用以及存在的对象

相关栏目:

用户点评