文章

單例模式 - Singleton Pattern

用途

在軟體開發中,單例模式(Singleton Pattern)用於確保一個類別只能創建一個實例
並提供一個全域的訪問點來獲取這個唯一的實例

classDiagram
  class Singleton{
    -Singleton singleton$
    +Singleton GetInstance()$
  }

例子

當談到單例模式時,我們可以使用一個現實生活的例子來解釋,比如一個公司的 CEO。
假設有一家公司,這家公司只能有一個 CEO,這位 CEO 在整個公司中是唯一的。
無論何時,任何人都只能與這位 CEO 互動,不能創建多個 CEO。

在這個例子中,CEO 就是單例模式的實例。
這位 CEO 的特點是,無論何時,任何人都只能獲取到同一個 CEO 實例,無法創建多個不同的 CEO。

Singleton

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
public class CEO
{
    private static CEO _instance;

    // 私有的構造函式,防止外部創建實例
    private CEO()
    {
        // 執行初始化操作
    }

    // 全域的訪問點,用於獲取唯一的 CEO 實例
    public static CEO GetInstance()
    {
        if (_instance == null)
        {
            // 如果實例為空,則創建一個新的 CEO 實例
            _instance = new CEO();
        }

        return _instance;
    }

    public void DoWork()
    {
        // 執行 CEO 的工作任務
    }
}

Client

1
2
3
4
5
6
7
CEO ceo1 = CEO.GetInstance();
CEO ceo2 = CEO.GetInstance();

// 因為只能創建一個 CEO 實例,所以 ceo1 和 ceo2 是同一個實例
Console.WriteLine(ceo1 == ceo2); // 輸出: True

ceo1.DoWork();

延伸

這邊的 GetInstance 可以搭配 Double-Checked Locking Pattern 使用

本文章以 CC BY 4.0 授權