單例模式 - 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 授權