在c++的面向对象的语言中 我们常常要根据对象的需求来尽可能使用符合对象的模式
在有些场景中 我们只想要一个类 不允许有第二个这样的类 但是可以有多个不同的指针来指向这同一个类;
这时 我们又要用到单例模式 单例模式有很多场景会用到 例如 一般项目中的管理类Control
我们只想拥有一个管理类 这时 我们就可以用单例模式
要想完成单例模式的场景 我们需要以下几个条件:
不可以直接定义对象
不可以调用拷贝构造函数进行初始化另一个对象
所以一般我们会把所有构造函数都设置成私有的
在我们想定义一个这样的类时 我们通过一个静态成员函数
static Num* GetNum()来实现
Num* Num::GetNum()
{
/*if (bFlag != false)
{
return NULL;
}
Num* num = new Num;
bFlag = true;
return num;*/
if (pNum==NULL)
{
pNum = new Num;
}
return pNum;
}
因为GetMun在类内并且它是静态的 所以他可以使用类内私有成员 并且他可以不通过变量名而直接对类内成员进行访问
如果num=NULL 我们就定义一个Num类num 然后返回num
如果我们num已经被定义 num!=NULL 那我们就直接返回num 不对num进行任何改动
完整代码如下
#include<iostream>
using namespace std;
class Num
{
private:
static Num* pNum;
//static bool bFlag;
private:
Num()
{
}
Num(Num& num)
{
}
public:
static Num* GetNum();
};
//bool Num::bFlag = false;
Num* Num::pNum = NULL;
Num* Num::GetNum()
{
/*if (bFlag != false)
{
return NULL;
}
Num* num = new Num;
bFlag = true;
return num;*/
if (pNum==NULL)
{
pNum = new Num;
}
return pNum;
}
int main()
{
Num*num1=Num::GetNum();
Num* num2 = Num::GetNum();
//Num num3(*num1);
/*Num::GetNum();
num2 = num1;*/
return 0;
}
//单例模式 只想有一个这样的类 一般屏蔽掉所有拷贝构造函数来实现