单例,就是以私有类的构造函数,公开类的静态属性或者静态方法得到这个类型的实例,从而保证这个类只会存在一个实例。
单例模式的实现
声明静态只读的锁对象
多线程下的双重锁
private SingleInstance(){}
private static SingleInstance _instance;
private static readonly object locker=new object();
public static SingleInstance GetInstance()
{
if(_instance==null)
{
lock(locker)
{
if(_instance==null)
{
_instance=new SingleInstance();
}
}
}
return _instance;
}
c#与公共语言运行库也提供了一种“静态初始化”方法,这种方法不需要开发人员显示的编写线程安全代码,即可解决多线程环境下它是不安全的问题【MSDN】
public sealed class Singleton
{
private static readonly Singleton _instance=new Singleton();
private Singleton(){}
public static Singleton GetInstance()
{
return _instance;
}
}
参考资料:《大话设计模式》--程杰