/// <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(); }
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; }