标签:
单例模式
单例模式,也叫单子模式,是一种常用的软件设计模式。在应用这个模式时,单例对象的类必须保证只有一个实例存在。
要点
1. 某个类只能有一个实例
2. 必须自行创建这个实例
3. 必须自行向整个系统提供这个实例
构建方式
1 public class Singleton 2 { 3 //volatile:不被线程访问和修改 4 private static volatile Singleton Instance = null; 5 private static object _lock = new object(); 6 //私有构造 7 private Singleton() { } 8 //锁定对象只能被一个线程访问并返回 9 public static Singleton getInstance() 10 { 11 if (Instance == null) 12 { 13 lock (_lock) 14 { 15 if (Instance == null) 16 { 17 Instance=new Singleton(); 18 } 19 } 20 } 21 return Instance; 22 } 23 }
上述代码使用了双重锁方式较好地解决了多线程下的单例模式实现。先看内层的if语句块,使用这个语句块时,先进行加锁操作,保证只有一个线程可以访问该语句块,进而保证只创建了一个实例。再看外层的if语句块,这使得每个线程欲获取实例时不必每次都得加锁,因为只有实例为空时(即需要创建一个实例),才需加锁创建,若果已存在一个实例,就直接返回该实例,节省了性能开销。
public class Singleton { //实例私有只读对象 private static readonly Singleton Instance = new Singleton(); //私有构造 private Singleton(){} //返回对象 public static Singleton GetInstance() { return Instance; } }
上面使用的readonly关键可以跟static一起使用,用于指定该常量是类别级的,它的初始化交由静态构造函数实现,并可以在运行时编译。在这种模式下,无需自己解决线程安全性问题,CLR会给我们解决。由此可以看到这个类被加载时,会自动实例化这个类,而不用在第一次调用GetInstance()后才实例化出唯一的单例对象。
标签:
原文地址:http://www.cnblogs.com/Precious/p/4674082.html