單例模式第一篇

        一、單例模式的特點
        1.1 爲了保證不能創建實例,也不能讓實例的個數增加,應該屏蔽掉創建實例的方法,即將構造函數私有化;
        1.2 將該實例在靜態區static預先創建一個(保證要有一個實例);
        1.3 需要用一個成員變量指向這個實例,爲了保證這個實例永遠存在,且不被修改和刪除,這個成員變量應該放在private裏;
        1.4 雖然成員變量已經被保護起來,但依然需要被外界訪問,讀訪問。
              這個成員變量是一個static,需要提供一個訪問該變量的方法;
              由於此時還無法通過對象來調用此方法,所以此方法用static修飾,可以通過類名來直接訪問。

        二、單例模式的案例
//single.cpp

#define _CRT_SECURE_NO_WARNINGS

#include <iostream>
#include <string>
using namespace std;

class Printer
{
public:
	static Printer* getInstance(){
		return instance;
	}

	void log(string text){
		cout << "log: " << text<< endl;
	}

private:
	Printer(){}
	static Printer* instance;
};

Printer *Printer::instance = new Printer;


int main(void)
{
	Printer *p1 = Printer::getInstance();
	Printer *p2 = Printer::getInstance();

	p1->log("log1");
	p2->log("log2");

	if (p1 == p2)
	{
		cout << "p1 和p2是一個實例" << endl;
	}

	system("pause");

	return 0;
}

        效果如下:

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