设计模式之单件模式

看代码

 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;
}

运行:

地址一样

第一次调用获取实例的函数时,静态类的变量指针空,所以会创建一个对象出来,第二次调用就不是空了,直接返回第一次的对象指针(地址)。

posted @ 2018-04-11 16:24  小雨滴答  阅读(134)  评论(0编辑  收藏  举报