Singleton Pattern
屬於 Creational pattern。
確保 class 只有一個 instance,並且給它 global 的存取點。
可以做到延後產生 instance,也就是真正使用到時才 create instance。如果用 global variable,依據不同語言及實作的特性可能在程式一開始就產生 instance。
常用來管理 shared resource。
做法
- 將 constructor、copy constructor、destructor、assignment operator 宣告為 private 確保外面無法產生第二個 instance 及 destory instance。
- 使用 static function 讓外界取得唯一的 instance。
C++ 實作
1 | class Singleton |
外面要取得 instance 時 call Singleton::GetSingleton()
。這邊直接用 C++ 的 static local variable 在 function 第一次 call 時會 initialize 之後不會再 initialize 的特性,而它的 lifetime 會持續到程式結束。
有另一種做法是 GetSingleton()
不 return pointer,而 return reference。
這個實作沒有 thread-safe,有多個 thread 會 call GetSingleton()
就 GG 了。要 thread-safe 可以用 double-checked locking。