單例模式 (Singleton Pattern) 可建立程式執行時的唯一物件。其特色包含:
該類別在程式執行期間,只容許一個 Instance (實例) 存在。
須包含檢查 Instance 是否存在的程式、產生 Instance 的程式,以及提供 Public
方法供外部程式存取 Instance。
優點:和 Static Class 相比,保留較多的特性,如:可被封裝與繼承,可被動態產生等。
缺點:等於是全域變數。在任何類別都能存取 Instance。當發生錯誤時,不容易找出是哪一次的存取導致的;無法保證每次執行同樣方法時,都取得同樣的回傳值。
private
,因此若有類別欲繼承,將會在編譯時發生錯誤。sealed
限制該類別不能被繼承。///<summary> 單例模式類別 </summary>
public sealed class Singleton // 使用 sealed 關鍵字表示不能被繼承
{
private static Singleton instance = null;
public static Singleton Instance
{
get
{
if (instance == null)
{
instance = new Singleton(); // 第一次被 get 時,才建立物件
}
return instance; // 之後直接回傳先前建立的物件
}
}
// NOTE: 如果在多執行緒的狀態下使用單例類別,要在取得 Instance 時,加入 lock 檢查
private Singleton() { } // 宣告私有建構子,強迫外部程式使用 Instance
public void Run()
{
Console.WriteLine("Singleton Class");
}
}
sealed
關鍵字:Why Singleton Class Sealed in C# - Dot Net Tutorials