设计模式之享元模式

10/23/2012 8:06:48 AM

名称:享元模式

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

     适用环境:

     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