1、意图
运用共享技术,有效地支持大量细粒度的对象。
2、类图
3、说明
1) 关键是内部状态和外部状态的区别,内部状态存储于flyweight中,它包含了独立于flyweight场景的信息,这些信息使得flyweight可以被共享。而外部状态取决于flyweight的场景,并根据场景而变化,外部状态信息不能被共享。用户负责在必要的时候,把外部状态信息传递给flyweight。注意,
共享的是对象,不是类。
比如书中的例子,做一个文本编辑器,以ASCII编码为例,每个字符对象就是一个flyweight对象,可以被共享。而字体、文字位置等信息是外部状态。
2) UnsharedConcreteFlyweight
并非所有FlyWeight子类都被共享,在Flyweight的层次结构中,UnsharedConcreateFlyweight通常将ConcreteFlyweight的对象作为子节点。例如row,column都是UnsharedConcreteFlyweight.
3)不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory得到ConcreteFlyweight对象,这样可以保证对它们进行适当的共享。
4)如果外部状态用计算得出,而非用存储,能节省更大的存储空间。