解决在系统中存在大量细小对象耗费内存的情况。
// 参考:http://java.chinaitlab.com/model/795882_2.html public abstract class Flyweight { public abstract void Operation(); } public class ConcreteFlyWeight : Flyweight { private string str; public ConcreteFlyWeight(string str) { this.str = str; } public override void Operation() { Console.WriteLine("Concrete--flyweight :" + this.str); } } public class FlyweightFactory { private Hashtable flyweights = new Hashtable(); public FlyweightFactory() { } // 这里其实是基于c#本身的语言特性来实现的:c#中将类赋值的话使用的是 // 引用,这里直接返回这个引用。 public Flyweight GetFlyWeight(object obj) { Flyweight flyweight = (Flyweight)this.flyweights[obj]; if (flyweight == null) { flyweight = new ConcreteFlyWeight((string)obj); this.flyweights.Add(obj, flyweight); } return flyweight; } public int GetFactorySize() { return this.flyweights.Count; } } public class FlyWeightPattern { FlyweightFactory factory = new FlyweightFactory(); Flyweight fly1; Flyweight fly2; Flyweight fly3; Flyweight fly4; Flyweight fly5; Flyweight fly6; public FlyWeightPattern() { // ... fly1 = factory.GetFlyWeight("Google"); fly2 = factory.GetFlyWeight("qutr"); fly3 = factory.GetFlyWeight("Google"); fly4 = factory.GetFlyWeight("Google"); fly5 = factory.GetFlyWeight("Google"); fly6 = factory.GetFlyWeight("Google"); } public void ShowFlyweight() { // ... fly1.Operation(); fly2.Operation(); fly3.Operation(); fly4.Operation(); fly5.Operation(); fly6.Operation(); int size = factory.GetFactorySize(); Console.WriteLine("size = " + size); } public static void Main(string[] args) { Console.WriteLine("The FlyWeight Pattern!"); FlyWeightPattern pattern = new FlyWeightPattern(); pattern.ShowFlyweight(); } }
作者:许强1. 本博客中的文章均是个人在学习和项目开发中总结。其中难免存在不足之处 ,欢迎留言指正。 2. 本文版权归作者和博客园共有,转载时,请保留本文链接。
1. 本博客中的文章均是个人在学习和项目开发中总结。其中难免存在不足之处 ,欢迎留言指正。 2. 本文版权归作者和博客园共有,转载时,请保留本文链接。