单例模式即所谓的一个类只能有一个实例, 也就是类只能在内部实例一次,然后提供这一实例,外部无法对此类实例化。
单例模式的特点:
1、只能有一个实例;
2、只能自己创建自己的唯一实例;
3、必须给所有其他的对象提供这一实例。
普通单例模式(没有考虑线程安全)
1 /// <summary> 2 /// 单例模式 3 /// </summary> 4 public class Singleton 5 { 6 private static Singleton singleton; 7 8 private Singleton() { } 9 10 /// <summary> 11 /// 获取实例-线程非安全模式 12 /// </summary> 13 /// <returns></returns> 14 public static Singleton GetSingleton() 15 { 16 if (singleton == null) 17 singleton = new Singleton(); 18 return singleton; 19 } 20 }
考虑多线程安全
1/// <summary> 2 /// 单例模式 3 /// </summary> 4 public class Singleton 5 { 6 private static object obj = new object(); 7 8 private static Singleton singleton; 9 10 private Singleton() { } 11 12 /// <summary> 13 /// 获取实例-线程安全 14 /// </summary> 15 /// <returns></returns> 16 public static Singleton GetThreadSafeSingleton() 17 { 18 lock (obj) 19 { 20 if (singleton == null) 21 { 22 singleton = new Singleton(); 23 } 24 } 25 return singleton; 26 } 27 }