C# 设计模式———享元模式

享元模式简介

使用共享对象可有效地支持大量的细粒度的对象。主要用于减少创建对象的数量,以减少内存占用和提高性能。这种类型的设计模式属于结构型模式,它提供了减少对象数量从而改善应用所需的对象结构的方式。
在这里插入图片描述
何时使用:

  1. 系统中有大量对象。
  2. 这些对象消耗大量内存。
  3. 这些对象的状态大部分可以外部化。
  4. 这些对象可以按照内蕴状态分为很多组,当把外蕴对象从对象中剔除出来时,每一组对象都可以用一个对象来代替。
  5. 系统不依赖于这些对象身份,这些对象是不可分辨的。

大大减少对象的创建,降低系统的内存,使效率提高。

.net中用到享元模式的案例:

  • string的驻留池;
  • redis, db的连接池;
  • 线程池 而不是每次new thread…
  • Task -> 寄托在线程池上的线程。

C# 享元模式Demo

在这里插入图片描述

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace FlyweightPattern
{
    class Program
    {
        static void Main(string[] args)
        {
            FlyWeight flyWeight1 = Factory.CreateInstance(10);
            flyWeight1.Run("bob");

            FlyWeight flyWeight2 = Factory.CreateInstance(10);
            flyWeight2.Run("Andy");

            var b = flyWeight1.Equals(flyWeight2);
            Console.WriteLine(b);
        }
    }

    public abstract class FlyWeight
    {
        public abstract void Run(string str);
    }

    public class ConcreteFlyWeight : FlyWeight
    {
        public override void Run(string str)
        {
            Console.WriteLine("{0},你好", str);
        }
    }

    public class UnSharedConcreteFlyWeight : FlyWeight
    {
        public override void Run(string str)
        {
            throw new NotImplementedException();
        }
    }

    public class Factory
    {
        static Dictionary<int, FlyWeight> cache = new Dictionary<int, FlyWeight>();

        public static FlyWeight CreateInstance(int num)
        {
            if (cache.ContainsKey(num))
            {
                return cache[num];
            }
            cache.Add(num, new ConcreteFlyWeight());
            return cache[num];
        }
    }
}

测试结果:
在这里插入图片描述

参考资料

https://www.bilibili.com/video/av78515440?t=1331&p=20
更多:

23种设计模式C#

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章