GOF 著作中對 Singleton Pattern 的描述為:保證一個class只有一個實體(Instance),有人覺得 GOF 範例在判斷 Instance 是否
已建立降低了效率,有人就把他改為以下的方式來建立
Singleton *Singleton_create()
{
static Singleton m_Instatnce;
return &m_Instatnce;
}
但在多執行緒環境下有 memory leak 的疑慮,若還要加上一大堆執行緒的同步控制,則上面那個高效率的方法就不見了...:(
有兩個方法可以解決,一種另弄一個類別來幫忙,如以下的簡單示意:
class Singleton
{
static Singleton *_obj; // 存放建構出來的 Singleton 唯一的物件
public:
static Singleton *Create(void);
friend class Factory;
};
class SingletonHelp
{
public:
void SingletonHelp(Singleton **Obj)
{
/* 加一些同步控制....*/
*Obj = new Singleton();
}
};
Singleton::Create(void)
{
static SingletonHelp _Temp(&_obj);
return _obj;
}
但總覺得用了一些非正派的技巧,沒法確定是否能完全如己所願。
另一種則是以下的介紹的範例,藉由函數指標可替換的特性,完全符合 C++ 的規範內:
/*----------- ..
訪客只能看到部份內容,免費 加入會員 或由臉書 Google 可以看到全部內容