学习更多设计模式请参考:入门设计模式之汇总篇
享元模式:以共享的方式高效的支持大量的细粒度对象
我们以咖啡为例,一家咖啡店一天卖出几千杯咖啡其实这几千杯也不过是几十种口味。在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<String,Coffee> 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()+"种"); } }
其实大家看了代码就明白了享元模式的核心思想,那就是重复利用以及存在的对象
原文地址:https://www.cnblogs.com/zhixiang-org-cn/p/9249012.html
时间: 2024-11-02 16:23:17