C# 最簡單實作單例模式 (貪婪單例 Greed Singleton)

「單例模式」是一種設計模式,在記憶體中只有一個實例,換句話說就是只有被實例化一次、只有被 new 一次。
這樣的好處就是能夠節省記憶體空間、避免重複的建立和釋放物件,不只避免重複資源占用,還可以提高性能、讓該物件在全域都能使用。

而單例模式又有分成以下兩種模式:
  • 貪婪單例模式(Greed Singleton): 一開始就實例化物件
  • 懶惰單例模式(Lazy Singleton): 實際使用到時才實例化物件
貪婪單例模式非常簡單,要實作只要幾行就可以:
    
public class Singleton
{
    private static Singleton _instance = new Singleton();

    private Singleton()
    {
    }

    public static Singleton Instance
    {
        get { return _instance; }
    }
}
    

要使用時只要取得靜態的自己就可以了
    
Singleton singleton = Singleton.Instance;
    

因為是要「單例」,所以我們把建構子設為 private,之後在實例化時會拋出下面的錯誤,就不會忘記而傻傻的和平常一樣 new Singleton()
    
Cannot access private constructor 'Singleton()' here
    

因為 C# 有非常多的語法糖,所以貪婪單例模式可以被簡化成下面這樣
    
public class Singleton
{
    public static Singleton Instance { get; } = new();

    private Singleton()
    {
    }
}
    

而懶惰單例模式因為在多執行緒時可能同時實例化,所以寫起來比較複雜,那就讓我們下節課再說囉~

留言