FlyWeight模式(结构型)
2018-09-17 本文已影响0人
潭潭_180
享元模式
在面向对象系统的设计何实现中,创建对象是最为常见的操作。这里面就有一个问题:如果一个应用程序使用了太多的对象, 就会造成很大的存储开销。特别是对于大量轻量级 (细粒度)的对象,比如在文档编辑器的设计过程中,我们如果为没有字母创建一个对象的话,系统可能会因为大量的对象而造成存储开销的浪费。例如一个字母“a”在文档中出现了100000 次, 而实际上我们可以让这一万个字母“ a” 共享一个对象, 当然因为在不同的位置可能字母“a” 有不同的显示效果(例如字体和大小等设置不同), 在这种情况我们可以为将对象的状态分为“外部状态”和“ 内部状态”, 将可以被共享(不会变化)的状态作为内部状态存储在对象中, 而外部对象(例如上面提到的字体、 大小等) 我们可以在适当的时候将外部对象最为参数传递给对象(例如在显示的时候,将字体、大小等信息传递给对象)。
结构图
FlyWeight Pattern结构图可以从图 2-1 中看出, Flyweight 模式中有一个类似 Factory 模式的对象构造工厂FlyweightFactory,当客户程序员( Client)需要一个对象时候就会向 FlyweightFactory 发出请求对象的消息GetFlyweight()消息, FlyweightFactory 拥有一个管理、存储对象的“仓库”(或者叫对象池vector 实现), GetFlyweight()消息会遍历对象池中的对象,如果已经存在则直接返回给Client,否则创建一个新的对象返回给 Client。当然可能也有不想被共享的对象(例如结构图中的UnshareConcreteFlyweight), 但不在本模式的讲解范围, 故这里不必过多观注。
个人感觉实际上是一个对象管理器。