Java设计模式(11)——结构型模式之享元模式(Flyweight)
2017-10-29 20:15
489 查看
一、概述
概念避免大量拥有相同内容的小类的开销(如耗费内存),使大家共享一个类(元类)。
UML简图
单纯享元模式
角色
抽象享元角色(Flyweight):定义享元子类公共接口
具体享元角色(ConcreteFlyweight):具体享元类,实现实例共享
享元工厂(FlyweightFacotry):创建和管理享元角色
客户端:维护一个对所有享元对象的引用,自行存储外部状态。
内部状态是存储在享元对象内部,一般在构造时确定或通过setter设置,并且不会随环境改变而改变的状态,因此内部状态可以共享。
外部状态是随环境改变而改变、不可以共享的状态。外部状态在需要使用时通过客户端传入享元对象。外部状态必须由客户端保存。
对于以上两种状态不是很明白可以等下文的代码中具体体会!
更加具体的内外状态的示例:在咖啡店里,咖啡有“口味”之分,也就是口味可以作为咖啡的内部状态,而咖啡做好后送到对应桌号的桌子上,由于桌子是不固定的,故桌子作为外部状态。 --参考自《Java与模式》的例子
复合享元模式
应用场景
二、实践
就按照单纯享元模式进行代码的创建抽象享元接口
/** * 抽象享元角色 * * @author Administrator **/ public abstract class Flyweight { /** *接口方法 * @param externalState 外部状态,由客户端传入 */ public abstract void method1(String externalState); }
具体享元类
/** * 具体享元角色 * * @author Administrator **/ public class ConcreteFlyweight extends Flyweight{ /** * 内部状态,构建时确定 */ private String internalState; public ConcreteFlyweight(String internalState) { this.internalState = internalState; } @Override public void method1(String externalState) { System.out.println("内部状态:"+internalState); System.out.println("外部状态:"+externalState); } }
享元工厂
/** * 享元工厂 * * @author Administrator **/ public class FlyweightFactory { private static Map<String, Flyweight> flyweightMap = new HashMap<>(); public static Flyweight getFlyweight(String state) { if (flyweightMap.get(state) == null) { // flyweightMap.containsKey(state) Flyweight flyweight = new ConcreteFlyweight(state); flyweightMap.put(state, flyweight); } return flyweightMap.get(state); } }
三、思考与改进
什么条件下使用享元模式相关文章推荐
- 设计模式(11)-结构型-享元模式(Flyweight)
- 设计模式(11)--Flyweight(享元模式)--结构型
- 设计模式之11 - 享元模式FlyWeight
- (结构型模式)FLYWEIGHT——享元模式
- [设计模式-结构型]享元模式(Flyweight )
- (结构型模式)FlyWeight——享元模式
- 设计模式深入学习--Flyweight 享元模式(结构型模式)
- [设计模式-结构型]享元模式(Flyweight )
- 设计模式(十)享元模式Flyweight(结构型)
- 设计模式-结构型-享元模式(Flyweight)
- 【设计模式学习笔记十二】【结构型模式】【享元模式(FlyWeight)】
- PHP设计模式:结构型之享元模式(Flyweight)
- C#面向对象设计模式第十二讲:Flyweight 享元模式(结构型模式)
- 结构型模式之享元模式(Flyweight)
- [设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(一)
- 结构型模式-Flyweight ( 享元模式 )
- 设计模式(十二): Flyweight享元模式 -- 结构型模式
- Java经典设计模式-结构型模式-享元模式(Flyweight)
- [设计模式笔记]二. 结构型模式--12.Flyweight模式(享元模式)(二)
- 设计模式21---设计模式之享元模式(Flyweight)(结构型)