設計模式--單件模式

Singleton模式是常用的設計模式之一,但是要實現一個真正實用的設計模式卻也不是件容易的事情。

 

1.標準的實現

 

這是教科書上使用的方法。看起來沒有什麼問題,其實包含很多的問題。下面我們一個一個的解決。

2.自動垃圾回收

上面的程序必須記住在程序結束的時候,釋放內存。爲了讓它自動的釋放內存,我們引入auto_ptr改變它。

3. 增加模板

在我的一個工程中,有多個的Singleton類,對Singleton類,我都要實現上面這一切,這讓我覺得煩死了。於是我想到了模板來完成這些重複的工作。

現在我們要添加本文中最吸引人單件實現:

4. 線程安全

上面的程序可以適應單線程的程序。但是如果把它用到多線程的程序就會發生問題。主要的問題在於同時執行_instance.reset ( new T); 就會同時產生兩個新的對象,然後馬上釋放一個,這跟Singleton模式的本意不符。所以,你需要更加安全的版本:

///////////////////////////////////////////////////////////////////////////////

5.實用方法

比如你有一個需要實現單件模式的類,就應該這樣實現:

 

一個簡單的Singleton模式的實現,可以看到C++語言背後隱藏的豐富的語意,我希望有人能實現一個更好的Singleton讓大家學習。我從一開始實現Singleton類的過程,其實就是我學習C++的過程,越是深入越覺得C++了不起。

 

參考自:

http://www.cppblog.com/dyj057/archive/2005/09/20/346.aspx

http://wenku.baidu.com/view/e3db5cfe04a1b0717fd5dd32.html

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章