设计模式——单例模式
单例模式,保证一个类仅有一个实例,并提供一个访问它的全局访问点
//普通单例
class Singleton
{
private static Singleton instance;
private Singleton() //构造方法让其private,这就堵死了外界利用new创建此类实例的可能了
{
}
public static Singleton GetInstance()//此方法是获得本类实例的唯一全局访问点
{
if (instance == null)//若实例不存在,则new一个新实例,否则返回已有的实例
{
instance = new Singleton();
}
return instance;
}
}
//多线程单例
//多线程单例
class Singleton
{
private static Singleton instance;
private static readonly object syncRoot = new object();//程序运行时创建一个静态只读的进程辅助对象
private Singleton() //构造方法让其private,这就堵死了外界利用new创建此类实例的可能了
{
}
public static Singleton GetInstance()//此方法是获得本类实例的唯一全局访问点
{
lock (syncRoot)//在同意时刻加了锁的那部分程序只有一个线程可以进入
{
if (instance == null)//若实例不存在,则new一个新实例,否则返回已有的实例
{
instance = new Singleton();
}
}
return instance;
}
}
双重锁定
//双重锁定
class Singleton
{
private static Singleton instance;
private static readonly object syncRoot = new object();//程序运行时创建一个静态只读的进程辅助对象
private Singleton() //构造方法让其private,这就堵死了外界利用new创建此类实例的可能了
{
}
public static Singleton GetInstance()//此方法是获得本类实例的唯一全局访问点
{
if (instance == null)//先判断实例是否存在,不存在再加锁处理
{
lock (syncRoot)//在同意时刻加了锁的那部分程序只有一个线程可以进入
{
if (instance == null)//若实例不存在,则new一个新实例,否则返回已有的实例
{
instance = new Singleton();
}
}
}
return instance;
}
}
静态初始化
//静态初始化
public sealed class Singleton //sealed阻止发生派生,而派生可能增加实例
{
private static readonly Singleton instance = new Singleton();//readonly 在第一次引用类
private Singleton() { }
public static Singleton GetInstance()
{
return instance;
}
}