[Design] Flyweight Pattern
结构模式
结构模式描述如何将类或者类的对象结合在一起形成更大的结构。
结构模式描述两种不同的东西:类与类的实例。结构模式可以分为:类的结构模式和对象的结构模式两种。
类的结构模式:类的结构模式使用继承来把类、接口等组合在一起,以形成更大的结构。类的结构模式是静态的,比如类形式的适配器模式。
对象的结构模式:对象的结构模式描述怎么样把不同类型的对象组合在一起,以实现新的功能的方法。对象的结构模式是动态的。比如代理人模式。
--------------------------------------------------------------------------------------
享元(Flyweight)模式
享元模式是对象的结构模式。享元模式以共享的方式高效地支持大量的细粒度对象。根据享元对象的内部表象,享元模式可以分成单纯享元模式和复合享元模式两种形 式。享元对象不一定非要是不变对象。一个享元对象之所以能够共享,是因为它只含有可以共享的状态,而没有不可以共享的状态,这是应用享元模式的前提。享元 工厂实际上提供了一个缓存机制,判断对象是否存在然后创建或直接返回对象。
优缺点
使用享元模式可以大幅度降低内存中对象的数量。但是为了可以享元,需要将一些状态外部化, 这使得程序逻辑变的复杂,而且读取外部状态使得运行时间稍微变长。
单纯享元模式结构
1. 抽象享元角色
所有具体享元角色的基类。
2. 具体享元角色
实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。
3. 享元工厂角色
负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。
4. 客户端角色
本角色需要维护一个对所有享元对象的引用,自行存储所有享元对象的外蕴状态。
复合享元模式结构
1. 抽象享元角色
所有具体享元角色的基类。
2. 具体享元角色
实现抽象享元角色所规定的接口。如果有内蕴状态的话,必须为内蕴状态提供存储空间。内蕴状态必须与对象所处的周围环境无关,从而使得享元对象可以在系统内共享。又称单纯具体享元角色。
3. 复合享元角色
此角色所代表的对象是不可以共享的,但可分解成多个本身可以共享的单纯享元对象。又称不可共享的享元对象。
4. 享元工厂角色
负责创建和管理享元角色。保证享元对象可以被适当的共享,检查系统中是否有复合要求的对象。如果要直接近回,否则创建并返回。
5. 客户端角色
本角色需要自行存储所有享元对象的外蕴状态。