设计模式——享元模式
一、概念:运用共享技术有效的支持大量细粒度的对象。
二、UML示意图
定义一个抽象Flyweight类和一个可接受外部状态ExtrinsicState的Operation接口,具体Flyweight类可继承这个抽象Flyweight类并实现这个Operation接口。Client通过FlyweightFactory获取Flyweight对象,并传入外部状态执行Operation方法,这样就可以实现Flyweight可以共享大部分相同状态的同时又可以有不同的部分,可以更好地复用Flyweight对象。
三、优缺点
优点:
- 因为把不能共享的部分作为外部状态分离了出来,使得享元对象能够共享,能够大幅度地减少内存中享元对象的数量,节省了系统内存开销
缺点:
- 外部状态由客户端管理,使得客户端逻辑变得复杂。
- 提高了系统的复杂度,需要分离出外部状态和内部状态,而且外部状态具有固有化的性质,不应该随着内部状态的变化而变化,否则会造成系统的混乱。