定義:
一個類中只有一個實例,爲所有需要訪問此類的提供唯一一個全局的實例。
應用場景:
整個系統中只有一個實例,需要有二個以上的不適用。對應全局常量變量和數據庫的連接不適用使用單例
優點:
防止不同的對象對類進行實例化
缺點:
沒有銷燬實例對應的解決方式。
具體的代碼如下:
懶漢模式,這個在多線程下保證了只要一個實例的情況。當兩個線程同是進入_instanced==null代碼中,首先訪問到lock(lockCreate)會鎖住當前的lockCreate實例,使得下個線程等待其執行完成創建了實體纔可進入,保證了此線程外的其他線程通過_instance==null判斷爲false,從而不會重複創建線程。第一次調用CreateInstance方法創建實例,後面訪問的就直接調用而無需創建實例。
public class Singleton
{
private volatile static Singleton _instance = null;
private static readonly object lockCreate = new object();
private Singleton(){}
public static Singleton CreateInstance()
{
if(_instance == null)
{
lock(<span style="font-family: Arial, Helvetica, sans-serif;">lockCreate</span><span style="font-family: Arial, Helvetica, sans-serif;">)</span>
{
if(_instance == null)
_instance = new Singleton();
}
}
return _instance;
}
}
餓漢模式,這個是在靜態構造函數中就初始化創建,在C#的CRL中內置解決了併發性的問題,訪問加載這個類是就實例化單例類。
public sealed class Singleton
{
private static readonly Singleton instance=new Singleton();
public static Singleton GetInstance()
{
return instance;
}
}