C#設計模式(1)=>單例模式

若雲發表於2014-11-17

        什麼是單例模式:保證一個類只能有一個例項物件存在,並提供一個全域性的訪問點;

        應用環境:只需要一個物件,一個例項的時候

        例如:WinForm只能建立一個窗體的時候;只需要一個例項物件的時候

        程式碼:

      

 public class Singleton

{

//通過靜態的私有變數來判定是否類的例項化是否唯一

private static Singleton myInstancd;

 

private Singleton()

{

 

}

 

//定義全域性的方法提供類的外部訪問

public static Singleton GetInstance()

{

//如果為空則例項化物件,否則返回該物件

if(myInstancd==null)

{

myInstancd = new Singleton();

}

return myInstancd;

}

} 

 

 

 

 

缺點:在多執行緒的時候兩條執行緒同時訪問會都為空,會建立多個例項

解決辦法:加鎖

 

public class Singleton

{

//通過靜態的私有變數來判定是否類的例項化是否唯一

private static Singleton myInstancd;

//判定是否加鎖保證執行緒同步

private static readonly object myLock = new object();

private Singleton()

{

 

}

 

//定義全域性的方法提供類的外部訪問

public static Singleton GetInstance()

{

//lock加鎖的時候執行緒會掛起,不會出現多個例項物件

lock (myLock)

{

//如果為空則例項化物件,否則返回該物件

if (myInstancd == null)

{

myInstancd = new Singleton();

}

}

return myInstancd;

}

} 

參考

 

相關文章