设计模式之单件模式
看代码
1 #include <iostream> 2 using namespace std; 3 4 class ABC 5 { 6 public: 7 //private: //构造函数私有化,则无法被外部调用 8 ABC(){} 9 ~ABC(){} 10 }; 11 12 13 int main() 14 { 15 ABC a; //实例化1 16 ABC *b=new ABC; //实例化2 17 return 0; 18 }
编译没有错误,证明实例化成功
若将public改为private或protected,再运行则出现错误
证明构造函数私有化之后,无法被外部调用,这就涉及到了单件
只能被类内部的成员函数调用,所以可以弄一个共有函数去供外部调用,然后这个函数返回一个对象,为了保证多次调用这个函数返回的是一个对象,我们可以把类内部要返回的对象设置为静态的
#include <iostream> using namespace std; class ABC { private: //构造函数私有化,则无法被外部调用 ABC(){} static ABC *p; public: static ABC* getInstance() { if(p==NULL) p=new ABC(); return p; } }; ABC* ABC::p=NULL; int main() { ABC *t=ABC::getInstance(); //实例化1 ABC *tt=ABC::getInstance(); //实例化2 cout<<t<<endl<<tt<<endl; system("pause"); return 0; }
运行:
地址一样
第一次调用获取实例的函数时,静态类的变量指针空,所以会创建一个对象出来,第二次调用就不是空了,直接返回第一次的对象指针(地址)。