適用問題:
有時我們希望物件只存在唯一一個,例如:thread pool、caches、dialog box...,而單例模式能滿足我們這個需求。單例模式定義:
"The Singleton Pattern ensures a class has only one instance, and provides a global point of access to it." (單例模式保證一個類別僅有一個實例,並提供一個存取他的全域存取點)
單例模式code (C++):
單例模式的實作重點是把 constructor() 放在private區裡,private區裡的東西要透過物件存取,但要生成物件就必須執行constructor(),所以將constructor()放在private裡我們將無法生成物件,因此我們加入另一個 static Singleton *getInstance() 來幫我們生成第一個物件,若第一個物件已被生成過則回傳那第一個物件。
class Singleton{
private:
static Singleton *uniqueInstance;
Singleton(){}
public:
static Singleton *getInstance(){
if(uniqueInstance == null){
uniqueInstance = new Singleton();
}
return uniqueInstance;
}
// other useful methods here
}
(但要注意上面的code並非thread-safe,在多thread下可能會出問題,應該要在if(uniqueInstance == null)前加入mutex之類的鎖,避免生成多個物件)
參考資料:
1. Head First Design Patterns
2. JavaScript設計模式與開發實踐 (博碩出版)
沒有留言:
張貼留言