一、意图
运用共享技术有效地支持大量细粒度的对象
二、图解
对于一个文档编辑器,如果我们对每个文字都建立个对象将会消耗大量的内存。由于英文字母只有26个,如果我们只建立26个对象,而文档编辑器内的文字都都是共享的这些对象。如下图:
但是Flyweight对象应该只存自己的内部状态,如:字母只存储字符代码,而不存储它的大小,字体等外部状态。外部信息由用户提供,Flyweight自己根据信息绘画自己。
三、结构
四、其他
- 共享Flyweight越多,存储节约越多,如果外部状态是通过计算出来而非存储,将会更一步节约存储,但会增加计算时间。
- Flyweight对象是共享的,用户最好不要直接对它进行实例化,可以使用工厂模式实例化。
- 共享还意味着某种形式的引用计数和垃圾回收,当一个 Flyweight不再使用时,可以
回收它的存储空间。