Singleton 單件模式
保證一個類只有一個執行個體,並提供一個該執行個體的全域訪問點。
核心是如何控制使用者使用new對一個類的實力構造器的任意調用。
1、單線程Singleton模式實現
代碼
public class Singleton
{
//private static Singleton instance = new Singleton(); //不進行延時載入
private static Singleton instance;
private Singleton() { } //構造器
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton();
}
return instance;
}
}
}
public class Test
{
public static void Main()
{
Singleton t1 = Singleton.Instance;
Singleton t2 = Singleton.Instance;
Console.WriteLine(Object.ReferenceEquals(t1, t2) == true);
}
}
2、多線程Singleton模式實現
代碼
public class Singleton
{
private static volatile Singleton instance = null; //“volatile”用於保證代碼執行順序不被編譯器調整
private static object lockHelper = new Object();
private Singleton() { }
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (lockHelper)
{
if (instance == null)
{
instance = new Singleton();
}
}
}
return instance;
}
}
}
3、使用靜態構造器實現
特點:多線程、延時載入都能保證,但是不能傳參數,如果需要傳參數,可以附加屬性或方法實現。
實際項目中比較推薦的做法
代碼
public class Singleton
{
public static readonly Singleton Instance = new Singleton();
private Singleton() { }
}
public class Singleton
{
public static readonly Singleton Instance;
static Singleton()//靜態構造器
{
Instance = new Singleton();
}
private Singleton() { }
}