c#设计模式之享元模式

享元模式使用共享对象可有效的支持大量的细粒度的对象

类图如下:


Flyweight

public abstract class Flyweight
    {
        public string intrinsic;
        public string extrinsic;
        public Flyweight(string extrinsic)
        {
            this.extrinsic = extrinsic;
        }
        public void SetIntrinsic(string intrinsic)
        {
            this.intrinsic = intrinsic;
        }
        public string GetIntrinsic()
        {
            return intrinsic;
        }

    }

ConcreteFlyweight

 public class ConcreteFlyweight : Flyweight
    {
        public ConcreteFlyweight(string extrinsic) : base(extrinsic)
        {

        }
    }

FlyweightFactory

public class FlyweightFactory
    {
        private static Dictionary<string, Flyweight> flyweights = new Dictionary<string, Flyweight>();
        public static Flyweight GetFlyweight(string extrinsic)
        {
            if(flyweights.ContainsKey(extrinsic))
            {
                Flyweight one = null;
                flyweights.TryGetValue(extrinsic,out one);
                return one;
            }
            else
            {
                Flyweight one = new ConcreteFlyweight(extrinsic);
                flyweights.Add(extrinsic, one);
                return one;
            }
        }
    }

调用

static void Main(string[] args)
        {
            Flyweight flyweight = FlyweightFactory.GetFlyweight("x");
            Flyweight flyweight1 = FlyweightFactory.GetFlyweight("x");
        }

优点:

  1. 节省内存空间
  2. 提高创建效率

缺点:

  1. 提高了复杂性,分离出了内部状态和外部状态(可以共享的状态)

源代码地址: 点击我下载 提取码: 6qh7

©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 普希金是俄国的一位伟大诗人、戏剧家和小学家。《射击》是他的一篇有名的经典短篇小说,描绘的是军官生活,故事的主...
    高乐呵阅读 1,466评论 2 3
  • 想想自己三天打鱼两天晒网的,也没有坚持什么高雅的爱好,如果勉强罗列,听音乐和流行歌曲倒是追随了很多年。 严重失眠的...
    梦里依稀风铃阅读 626评论 1 15
  • 如果你是看到标题才点进来的,我相信你就是像我一样的一类人,自卑、胆怯不敢在人群里发言总是默默无闻,因为我就是属于自...
    294cfe96d700阅读 1,089评论 4 14
  • 小的时候总是想长大,但是长大后才发现大人的世界不是自己当初想象的那么美好。 以前经常听大人说生活多么不容易,自己总...
    熹遥阅读 416评论 0 1