享元模式
1、定义
享元模式(FlyWeight),运用共享技术有效的支持大量细粒度的对象。
2、结构图
单纯享元模式所涉及到的角色如下:
● 抽象享元(Flyweight)角色 :给出一个抽象接口,以规定出所有具体享元角色需要实现的方法。
● 具体享元(ConcreteFlyweight)角色:实现抽象享元角色所规定出的接口。如果有内蕴状态的话,必须负责为内蕴状态提供存储空间。
● 享元工厂(FlyweightFactory)角色 :本角色负责创建和管理享元角色。本角色必须保证享元对象可以被系统适当地共享。当一个客户端对象调用一个享元对象的时候,享元工厂角色会检查系统中是否已经有一个符合要求的享元对象。如果已经有了,享元工厂角色就应当提供这个已有的享元对象;如果系统中没有一个适当的享元对象的话,享元工厂角色就应当创建一个合适的享元对象。
3、代码
(1)抽象享元
public interface IFlyweight {
public void operate(String state);
}
(2)具体享元
public class ConcreteFlyweight implements IFlyweight {
private Character intrinsicState = null;
public ConcreteFlyweight(Character intrinsicState) {
super();
this.intrinsicState = intrinsicState;
}
@Override
public void operate(String state) {
System.out.println("Intrinsic State = " + this.intrinsicState);
System.out.println("Extrinsic State = " + state);
}
}
(3)享元工厂
/**
* 享元类工厂
* @author qiang
*
*/
public class FlyweightFactory {
private static Map<Character, IFlyweight> flyweightMap = new HashMap<Character, IFlyweight>();
public static IFlyweight getFlyweight(Character state){
IFlyweight f = flyweightMap.get(state);
if(f != null){
return f;
}else{
f = new ConcreteFlyweight(state);
flyweightMap.put(state, f);
return f;
}
}
}
(4)客户端
public class Client {
public static void main(String[] args) {
IFlyweight flyweight1 = FlyweightFactory.getFlyweight(new Character('a'));
flyweight1.operate("first call");
IFlyweight flyweight2 = FlyweightFactory.getFlyweight(new Character('b'));
flyweight2.operate("second call");
IFlyweight flyweight3 = FlyweightFactory.getFlyweight(new Character('a'));
flyweight3.operate("third call");
}
}
4、总结
享元模式的有点在于可以极大减少内存中对象的数量,使得相同的或者相似的对象在内存中只保留一份。
享元模式的外部状态相对独立,而且不影响内存的状态,从而使得享元对象可以再不同的环境中使用。
- 大小: 6.9 KB
分享到:
相关推荐
### C++设计模式之享元模式详解 #### 一、享元模式概述 享元模式(Flyweight Pattern)是设计模式中的一种优化模式,主要用于减少创建大量相似对象所需的内存消耗。在C++程序设计中,当系统中存在大量的相同或相似...
总的来说,"C++设计模式代码资源13_Flyweight.zip"提供了C++实现享元设计模式的实例,对于学习和理解享元模式以及如何在实际项目中应用这一模式具有很高的参考价值。通过深入研究和实践,开发者能够更好地掌握如何...
本文试图通过一个简单的字符处理的例子,运用重构的手段,一步步带你走进Flyweight模式,在这个过程中我们一同思考、探索、权衡,通过比较而得出好的实现方式,而不是给你最终的一个完美解决方案。面向对象的思想很...
设计模式09-外观模式、享元模式 设计模式10-代理模式、结构型模式大复习 设计模式11-行为模式-责任链、命令模式 设计模式12-解释器模式 设计模式13-迭代器模式 设计模式14-中介者模式、备忘录模式 设计模式15-观察者...
【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip 【Java设计模式】《设计模式之禅》中的23种设计模式.zip ...22. 享元模式 23. 桥梁模式
设计模式_源代码大全.zip 包括:1....享元模式 23.解释器模式 24.访问者模式 ... 相关资料:https://download.csdn.net/download/djk8888/11189309 和 https://download.csdn.net/download/djk8888/11189072
享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 行为型: 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 16. 观察者模式(Observer Pattern) 17. ...
28.3.1 享元模式优点和缺点 28.3.2 享元模式的应用 28.4 享元模式的扩展 28.4.1 线程安全的问题 28.4.2 性能平衡 28.5 最佳实践 第29章 桥梁模式 29.1 我有一个梦想…… 29.2 桥梁模式的定义 29.3 桥梁模式的应用 ...
23享元模式 24组合模式 25行为型模式概述 26模板方法模式 27策略模式 28命令模式 29责任链模式 30状态模式 31观察者模式 32中介者模式 33迭代器模式 34访问者模式 35备忘录模式 36解释器模式 37UMLet的使用与类图的...
1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...
02第二讲工厂方法模式 03第三讲抽象工厂模式 04第四讲工厂模式在开发中的运用 05第五讲单例模式 06第六讲原型模式 07第七讲建造者模式 08第八讲装饰模式 09第九讲策略模式 10第十讲观察者模式 11第十一讲享元模式 ...
1.2.6 享元模式 32 1.2.7 代理模式 34 1.3 行为型模式 37 1.3.1 责任链模式 37 1.3.2 命令模式 40 1.3.3 解释器模式 43 1.3.4 迭代器模式 45 1.3.5 中介者模式 49 1.3.6 备忘录模式 52 1.3.7 观察者模式 54 1.3.8 ...
(一)简单工厂模式 2 (二)策略模式 4 策略与工厂结合 6 单一职责原则 6 开放――封闭原则 6 里氏代换原则 7 依赖倒转原则 7 ...(二十二)享元模式 56 (二十三)解释器模式 59 (二十四)访问者模式 61
11. 享元模式:享元模式通过共享技术有效地支持大量细粒度的对象,减少内存消耗。 12. 代理模式:代理模式为其他对象提供一种代理以控制对这个对象的访问,可以实现远程代理、虚拟代理和保护代理。 13. 模板方法...
代码可以运行,下载这个后,建议买->《大话设计模式这本书》。来辅助学习。...17、享元模式 18、解释器模式 19、访问者模式 20、策略模式 21、装饰模式 22、代理模式 23、工厂方法模式 24、原型模式
享元模式(Flyweight Pattern) 12. 代理模式(Proxy Pattern) 13. 模板方法(Template Method) 14. 命令模式(Command Pattern) 15. 迭代器模式(Iterator Pattern) 行为型: 16. 观察者...
11. 享元模式:享元模式的主要思想是以共享的方式高效的支持大量的细粒度对象。这种模式的优点是可以大幅度的降低内存中对象的数量,但缺点是增加了系统的复杂度。 12. 代理模式:代理模式的主要思想是给某一个对象...
10. 享元模式:享元模式通过共享技术,有效地支持大量细粒度的对象。在Java中,比如字符串池和数据库连接池都是享元模式的应用。 11. 观察者模式:观察者模式定义了对象之间的一对多依赖关系,当一个对象的状态发生...
14.3.2 享元模式在任务调度系统中的应用 14.3.3 范例小结 第15章 代理模式(Proxy) 15.1 模式解说 15.2 结构和用法 15.2.1 模式结构 15.2.2 代码模板 15.3 范例与实践 15.3.1 代理模式在数据库程序中的应用...