什么是单例模式?
单例模式是一种软件(程序)设计模式,在它的核心结构中只包含一个叫做单例的特殊类。通过单例模式可以保证系统(程序)中,应该该模式的类一个类只有一个实例,即一个类只有一个对象实例。
单例模式如何设计?
- 将类的构造函数设置为private属性(保证外部不可以通过对象调用构造函数,即不可以通过类名直接创建对象)
- 通过类型作用于调用静态成员函数创建对象(此时还可以创建很多个对象)
- 设置控制,通过一个静态成员标记来说明该类是否被实例化过,如果没有被实例化过,则返回一个类的实例,并修改标记;如果已经被实例化过则返回一个空指针。
- 在析构函数中恢复标记,保证对象可以重复申请(重复申请是指当对象被delete之后,还可以继续申请出一个,并非可以存在多个对象)
代码解释
# include<iostream>
using namespace std;
class A
{
private:
A()//将构造函数设置为private属性
{
cout << "构造一个A的对象" << endl;
}
public:
static int sign;//控制标记
static A* getA()//设置创建对象的接口
{
if (1 == sign)
{
sign = 0;//创建对象之后,修改标志,表示不再允许继续创建对象
return new A();
}
else if (0 == sign)
{
cout << "已经存在一个A对象了,不允许继续构造" << endl;
return NULL;
}
}
~A()
{
cout << "恢复标志位" << endl;
sign = 1;//存在的对象被析构后,要保证可以重新申请,因此恢复标志
}
};
int A::sign = 1;
int main()
{
A *p = A::getA();
delete p;
A *q = A::getA();
return 0;
}