名称:享元模式
意图:运用共享技术有效地支持大量细粒度的对象
适用环境:
1、一个应用程序使用了大量的对象。
2、完全由于使用大量的对象,造成很大的存储开销。
3、对象的大多数状态都可变为外部状态。
4、如果删除对象的外部状,那么可以用相对较少的共享对象取代很多组对象。
5、应用程序不依赖于对象标识。由于Flyweight对象可以被共享,对于概念上明显有别的对象,标识测试将返回真值。
classFlyweightFactory
{
privateHashtableflyweights = newHashtable();
publicFlyweightFactory()
{
flyweights.Add("X", newConcreteFlyweight());
flyweights.Add("Y", newConcreteFlyweight());
flyweights.Add("Z", newConcreteFlyweight());
}
publicFlyweightGetFlyweight(stringkey)
{
return(Flyweight)flyweights[key];
}
}
abstractclassFlyweight
{
publicabstractvoidOperation(intextrinsicstate);
}
classConcreteFlyweight:Flyweight
{
publicoverridevoidOperation(intextrinsicstate)
{
Console.WriteLine("ConcreteFlyweight: "+ extrinsicstate);
}
}
classUnsharedConcreteFlyweight:Flyweight
{
publicoverridevoidOperation(intextrinsicstate)
{
Console.WriteLine("UnsharedConcreteFlyweight:"+
extrinsicstate);
}
}
调用:
intextrinsicstate = 22;
FlyweightFactoryfactory = newFlyweightFactory();
Flyweightfx = factory.GetFlyweight("X");
fx.Operation(--extrinsicstate);
Flyweightfy = factory.GetFlyweight("Y");
fy.Operation(--extrinsicstate);
Flyweightfz = factory.GetFlyweight("Z");
fz.Operation(--extrinsicstate);
输出:
ConcreteFlyweight: 21
ConcreteFlyweight: 20
ConcreteFlyweight: 19