单例模式(Sigleton Pattern):
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
通常我们可以让一个全局变量使得一个对象被访问,但它不能纺织你实例化多个对象,
一个最好的办法就是,让类自身负责保存它的唯一实例。这个类可以保证没有其它实例
可以被创建,并且它可以提供一个访问该实例的方法。
public class Sigleton
{
private static Sigleton instance;
/// <summary>
/// 构造方法设为Private,这样就避免外界用New创建此实例的可能。
/// </summary>
private Sigleton()
{
}
/// <summary>
/// 此方法是获得本类实例的唯一全局访问点
/// 若实例不存在,则New一个新实例,否则返回已有的实例
/// </summary>
/// <returns></returns>
public static Sigleton GetInstance()
{
if (instance == null)
{
instance = new Sigleton();
}
return instance;
}
}
多线程时的单例
lock是确保当一个线程位于代码的临界区时,另一个线程不进入临界区。如果其他线程试图进入锁定的代码,
则它将一直等待,直到该对象被释放。
class ThreadSigleton
{
private static ThreadSigleton instance;
//创建一个静态只读的进程辅助对象
private static readonly object sysnRoot=new object();
private ThreadSigleton()
{
}
public static ThreadSigleton GetInstance()
{
lock (sysnRoot)
{
if (instance == null)
{
instance = new ThreadSigleton();
}
}
return instance;
}
public static ThreadSigleton GetInstanceDoubleLock()
{
//先判断实例是否存在,不存在再加锁处理
if (instance == null)
{
lock (sysnRoot)
{
if (instance == null)
{
instance = new ThreadSigleton();
}
}
}
return instance;
}
}