设计模式:单例模式
前言
单例模式是一种常用的软件设计模式。在它的核心结构中只包含一个被称为单例类的特殊类。通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。(百度百科)
正文
我们简单的实现一个单例模式,先看代码,后分析:
单例示例代码
#include <iostream>
using namespace std;
//单例模式
class Single
{
private:
static Single *instance;
//构造函数私有化
Single() = default;
public:
//提供一静态方法获取类的实例
static Single* getInstance()
{
if (instance == nullptr)
instance = new Single;
return instance;
}
//其它数据成员和函数成员省略
};
Single* Single::instance = nullptr;
//class D 公有继承 Single
class D :public Single
{
};
int main(void)
{
cout << "******单例模式***by David***" << endl;
Single *p1 = Single::getInstance();
Single *p2 = Single::getInstance();
cout << (void*)p1 << ends << (void*)p2 << endl;
delete p1;
Single *p3 = D::getInstance();
cout << (void*)p3 << endl;
cin.get();
return 0;
}
运行
从运行结果看,p1、p2、p3都指向了同一个对象。p1、p2相同说明单例的存在,而p3则表明了整个继承体系中也只有一份单例。
单例的设计原理
- 为了不让用户自行创建类对象,需要把构造函数设置成私有的或受保护的。同时为了不让子类中使用构造函数,必须把构造函数私有化。
- 设计一个静态的类类型指针,因为静态成员在整个继承体系中只有一份。
- 提供一静态公共方法,这是对外获取单例的接口。
在cocos2dx中,就有单例的使用,比如:我们常用Director::getInstance();获取控制整个游戏的导演单例。
所有内容的目录