针对问题

当系统中有大量相似对象时,例如一个文本处理程序中的字符,假如用对象来保存每个字符,两个'a'字符对象的字符是相同的,只有位置、颜色、大小等区别,如果为每个字符保存所有信息的话,那么程序占用内存将会十分庞大。Flyweight模式将不同对象直接共享的信息抽取为一个共享对象以节约系统资源。

介绍

运用共享机制有效的支持大量细密度的对象。

实现

Flyweight模式的静态图如下:

其中:
Flyweight类描述了一个操作接口,这个接口接受并作用于外部状态。
ConcerteFlyweight类实现Flyweight接口,并保存内部状态,内部状态是与调用场景无关的,所以它可以在多个调用场景之间被共享。
UnsharedConcreteFlyweight类同样实现Flyweight接口,但它保存的状态并不独立于调用场景,也就是说它可以是非共享的。
FlyweightFactory类管理Flyweight的创建并可以实现引用计数和垃圾回收,这意味着需要屏蔽Flyweight的构造函数。… Read the rest