目录
1.提出的需求
2.如何定义一个类,使得这个类最多只能创建一个对象?
3.代码
4.小结
C/C++Linux服务器开发/后台架构师【零声教育】-学习视频教程-腾讯课堂
1.提出的需求
在架构设计时,某些类在整个系统生命期中最多只能有一个对象存在( Single Instance)。
2.如何定义一个类,使得这个类最多只能创建一个对象?
要控制类的对象数目,必须对外隐藏构造函数
思路
- 将构造函数的访问属性设置为 private
- 定义instance 并初始化为 NULL
- 当需要使用对象时,访问instance 的值
空值:创建对象,并用instance 标记
非空值: 返回instance 标记的对象
3.代码
#include <iostream>
#include <string>
using namespace std;
class SObject
{
static SObject* c_instance;
//1.将构造函数的访问属性设置为 private
//拷贝构造声明成私有不使用
SObject(const SObject&);
//声明成私有不使用
SObject& operator= (const SObject&);
//声明成私有不使用
SObject()
{
}
public:
static SObject* GetInstance();
void print()
{
cout << "this = " << this << endl;
}
};
//静态成员变量类外初始化
//定义instance 并初始化为 NULL
SObject* SObject::c_instance = NULL;
//静态成员函数类外初始化
SObject* SObject::GetInstance()
{
//当需要使用对象时,访问instance 的值
//空值:创建对象,并用instance 标记
//非空值: 返回instance 标记的对象
if( c_instance == NULL )
{
c_instance = new SObject();
}
return c_instance;
}
int main()
{
SObject* s = SObject::GetInstance();
SObject* s1 = SObject::GetInstance();
SObject* s2 = SObject::GetInstance();
//唯一对象
s->print();
s1->print();
s2->print();
return 0;
}
4.小结
单例模式是开发中最常用的设计模式之一
单例模式的应用使得一个类最多只有一个对象