軟件領域中的設計模式的重要性不言而喻。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶着疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可複用面向對象軟件的基礎》兩本書。
單例模式(Singleton):保證一個類僅有一個實例,並提供一個訪問它的全局訪問點。
通常我們可以讓一個全局變量使得一個對象被訪問,但它不能防止你實例化多個對象。一個最好的辦法是,讓類自身負責保存它的唯一實例。這個類可以保證沒有其他實例可以被創建,並且它可以提供一個訪問該實例的方法。
代碼如下:
#include <iostream>
#include <string>
#include <vector>
using namespace std;
class Singleton
{
private:
Singleton(){}
static Singleton* singel;
public:
static Singleton* GetInstance()
{
if (singel == NULL)
{
singel = new Singleton();
}
return singel;
}
};
Singleton* Singleton::singel = NULL;//外初始化靜態變量
//客戶端:
int main()
{
Singleton* s1 = Singleton::GetInstance();
Singleton* s2 = Singleton::GetInstance();
if (s1 == s2)
cout << "ok" << endl;
else
cout << "no" << endl;
return 0;
}
需要注意的是當我們定義Singleton子類的時候,子類的構造函數也是受保護的,如果Singleton要調用子類的構造函數,在子類中需要將Singleton聲明爲友元(friend)。