一、單例模式的特點
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;
}
效果如下: