目录
[显示]

1.摘要

当系统中存在大量细密度对象,而这些对象之间又有共享的数据时时,可以考虑使用Flyweight模式借阅空间占用。要注意的是Flyweight模式并不只是数据的共享,它仍然为每个共享对象提供Operate接口。

2. 针对问题

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

3. 介绍

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

4. 实现

Flyweight模式的静态图如下:

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

5. 特点

1、使用Flyweight模式可以减少空间上的消耗,从另一个角度说也减少了创建对象的时间消耗。
2、Flyweight由于内-外模式分离,会增加对于Flyweight对象的外部状态查找、计算、传输的执行开销。
3、Flyweight模式并不只是数据共享,它仍然为每个共享对象提供Operate接口。

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,