Flyweight(享元)---对象结构型模式

运用共享技术有效地支持大量细粒度的对象。

Flyweight模式描述了如何共享对象,使得可以细粒度地使用它们而无需高昂的代价。

Flyweight是一个共享对象,它可以同时在多个场景(context)中使用,并且在每个场景中Flyweight都可以作为一个独立的对象,这一点与非共享对象的实例没有区别。

内部状态存储于Flyweight中,它包含了独立于Flyweight场景的信息,这些信息使得Flyweight可以被共享。而外部状态取决于Flyweight场景,并根据场景而变化,因此不可共享。用户对象负责在必要的时候将外部状态传递给Flyweight。

Flyweight模式对那些通常因为数量太大而难以用对象来表示的概念或实体进行建模。需要把上下文作为参数传递。

Flyweight执行时所需的状态必定是内部的或外部的。内部状态存储于ConcreteFlyweight对象之中。而外部对象则由Client对象存储或计算。当用户调用Flyweight对象的操作时,将该状态传递给它。

用户不应直接对ConcreteFlyweight类进行实例化,而只能从FlyweightFactory对象得到ConcreteFlyweight对象,这可以保证对它们适当地进行共享。

使用Flyweight模式时,传输、查找和计算外部状态都会产生运行时的开销,尤其当Flyweight原先被存储为内部状态时。然而,空间上的节省抵消了这些开销。共享的Flyweight越多,空间节省也就越大。节约量随着共享状态的增多而增大。当对象使用大量的内部及外部状态,并且外部状态是计算出来的而非存储的时候,节约量将达到最大。

用共享减少内部状态的消耗,用计算时间换取对外部状态的存储。

猜你喜欢

转载自linshiquan.iteye.com/blog/1063947