1 namespace DesignModel.单例模式 2 { 3 /// <summary> 4 /// 懒汉式单例 5 /// </summary> 6 public class Singleton 7 { 8 private static Singleton instance; 9 10 private static readonly object obj = new object(); 11 private Singleton() 12 { 13 14 } 15 public Singleton GetInstance() 16 { 17 if (instance == null)//双重锁定 18 { 19 20 21 lock (obj) 22 { 23 if (instance == null) 24 { 25 instance = new Singleton(); 26 } 27 } 28 29 } 30 return instance; 31 } 32 } 33 34 /// <summary> 35 ///静态初始化的方法 36 /// 饿汉式单例 37 /// </summary> 38 public class Singleton2 39 { 40 /// <summary> 41 /// static 在运行时就分配内存给instance,CLR自己管理多线程问题,readonly 只允许在申明和构造函数中初始化,而又把构造函数申明为private。 42 /// 所以不再会改变了。 43 /// </summary> 44 private static readonly Singleton2 instance = new Singleton2(); 45 private Singleton2() { } 46 public Singleton2 GetInstance() { 47 return instance; 48 } 49 } 50 51 52 53 }
单例模式:很常见,需要注意的便是线程安全写法。