예제 #1
0
        /// <summary>
        ///
        /// </summary>
        /// <param name="args"></param>
        static void Main(string[] args)
        {
            //定义外部状态,例如字母的位置等信息
            int externalstate = 10;
            //初始化享元工厂
            FlyweightFactory factory = new FlyweightFactory();

            ;
            //判断是否已经创建了字母A,如果已经创建就直接使用创建的对象A
            Flyweight fA = factory.GetFlyweight("A");

            if (fA != null)
            {
                //把外部状态作为享元对象的方法调用参数
                fA.Operation(--externalstate);
            }

            //判断是否已经创建了字母B
            Flyweight fB = factory.GetFlyweight("B");

            if (fB != null)
            {
                fB.Operation(--externalstate);
            }

            Flyweight fC = factory.GetFlyweight("C");

            if (fC != null)
            {
                fC.Operation(--externalstate);
            }

            Flyweight fD = factory.GetFlyweight("D");

            if (fD != null)
            {
                fD.Operation(--externalstate);
            }
            else
            {
                Console.WriteLine("驻留池中不存在字符串D");
                Console.WriteLine("向驻留池添加字符D。。。。");
                ConcreteFlyweight d = new ConcreteFlyweight("D");
                factory.flyweights.Add("D", d);
            }

            Flyweight fD2 = factory.GetFlyweight("D");

            if (fD2 != null)
            {
                fD2.Operation(--externalstate);
            }
            Console.Read();
        }
예제 #2
0
        public Flyweight GetFlyweight(string key)
        {
            if (!flyweights.ContainsKey(key))
            {
                return(null);
            }

            Flyweight flyweight = flyweights[key] as Flyweight;

            if (flyweight == null)
            {
                Console.WriteLine($"驻留池中不存在字符串{key}");
                flyweight = new ConcreteFlyweight(key);
            }

            return(flyweight);
            // return flyweights[key] as Flyweight;
        }