C#设计模式——单例模式

  /*------------------Singleton  单例模式-------------------
         ①单例模式(单线程和多线程)
         ②单例模式的三种写法
         ③单例模式的优缺点
         ④深度探讨单例模式的应用场景
         需求分析:1.对象在构造的时候会耗时间或者占用资源
                  2.很多地方都需要用到这个对象
                  3.不同的地方使用一个实例和多个实例没有区别
        综上所述:对象重用,不需要重复构造
        解析:一、构造函数私有化----避免重复构造
             二、公开静态方法提供实例----这样才能提供外部访问
             三、静态变量共享----保证全局变量的唯一性
        思考:单线程与多线程的区别,考虑并发性
        解决方案:加锁,但是要考虑性能优化(因为重复加锁会影响性能),加判断
   */
#region
懒汉式 public static Singleton Instance = null; private static readonly object _padLock = new object(); public static Singleton CreateInstance() { if (Instance == null) { lock (_padLock)//保证方法块儿只有一个线程可以进入 { Console.WriteLine("进入lock排队...."); Thread.Sleep(1000); if (Instance == null) { Instance = new Singleton(); } } } return Instance; } #endregion
#region 饿汉式1
        public static SingletonSecond Instance = null;
        /// <summary>
        /// 静态构造函数:由CLR保证,在第一次使用到这个类型之前,自动被调用且只调用一次
        /// 很多初始化都可以写在这里
        /// </summary>
        static SingletonSecond()
        {
            Instance = new SingletonSecond();
        }
        public static SingletonSecond CreateInstance()
        {
            return Instance;
        }
#endregion
#region饿汉式2
   /// <summary>
       /// 静态构造函数:由CLR保证,在第一次使用到这个类型之前,会自动初始化且只会初始化一次
        private static SingletonThird Instance = new SingletonThird();
        public static SingletonThird CreateInstance()
        {
            return Instance;
        }
#endregion

 

posted @ 2020-05-17 16:11  p1016520  阅读(141)  评论(0编辑  收藏  举报