Singleton是撰寫程式時常用到的一個設計模式,例如需要實作某個單一控管的容器(連接池是一個例子),同時也需要考慮Singleton類別的執行緒安全,我們必須保證不會同時有兩個以上的物件被實體化(new instance)。
以下是一個Singleton類別的範例,此範例使用雙重判斷(double-check)的手法來避免兩個以上的物件被實體化:
public sealed class Singleton
{
private static volatile Singleton instance;
private static object syncRoot = new Object();
private Singleton() {}
public static Singleton Instance
{
get
{
if (instance == null)
{
lock (syncRoot)
{
if (instance == null)
instance = new Singleton();
}
}
return instance;
}
}
}
[Reference]: