仓库?对象池?有些可以共享的在实际应用中需要反复构造的对象,我们可以在第一次需求构造时同时将其实体放在一个存储结构中,链表?数组?容器?map?随便!当第二次,第三次要用到一个对象时,到存储结构中查找,找到了就引用,找不到就创造,再放入存储器中。
感觉同时在模拟多个Singleton……但是,本质上是不同的,可能不是全局唯一的!
内蕴 由ConcreteFlyweight本身提供,作为一种内部属性,构造函数中传入
外蕴 查找到实体后,通过opertion操作添加自己的特性
class Flyweight
class ConcreteFlyweight : public Flyweight
operation: getinstrinsicstate
FlyweightFactory
attribute : vector<Flywieght*>
operation : get(key)
{
iter find(key);
if(true)
return *iter
else
{
Flywieght* fly= new ConcreteFlyweight(key);
push(fly);
return fly;
}
}
key可作为内蕴,也可通过key查找到相应的产品后内部定义
fly->operation(外蕴)