設計模式—單例模式(十七)

        軟件領域中的設計模式的重要性不言而喻。設計模式中運用了面向對象編程語言的重要特性:封裝、繼承、多態。雖然知道這些特性的定義但是並沒有做到真正的理解,這樣特性有什麼作用?用於什麼場合中等等問題,帶着疑問開始學習設計模式,主要參考《大話設計模式》和《設計模式:可複用面向對象軟件的基礎》兩本書。   

        單例模式(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)。

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