/*------------------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