今天学习第二个模式:单例模式。只允许系统有一个实例运行,提供全局访问该实例的公共方法。
class Singleton
{
private static Singleton instance=null; //静态私有成员变量 //私有构造函数
private Singleton()
{
} //静态公有工厂方法,返回唯一实例
public static Singleton GetInstance()
{
if(instance==null)
instance=new Singleton();
return instance;
}
}
饿汉单例:
class EagerSingleton
{
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() { }
public static EagerSingleton GetInstance()
{
return instance;
}
}
懒汉单例+双重保险
class LazySingleton
{
private static LazySingleton instance = null;
//程序运行时创建一个静态只读的辅助对象
private static readonly object syncRoot = new object();
private LazySingleton() { }
public static LazySingleton GetInstance()
{
//第一重判断,先判断实例是否存在,不存在再加锁处理
if (instance == null)
{
//加锁的程序在某一时刻只允许一个线程访问
lock(syncRoot)
{
//第二重判断
if(instance==null)
{
instance = new LazySingleton(); //创建单例实例
}
}
}
return instance;
}
}