单例是一种有争议的设计模式,因为他违反了面向对象的初衷,单例像全局变量,有时候不用不行,所以这里还是介绍下,建议单例不要轻易使用。
单例的创建步骤
1.默认构造函数私有
将默认构造函数设为私有, 防止其他对象使用单例类的 new运算符。
2.静态成员函数返回唯一创建的对象
新建一个静态构建方法作为构造函数。 该函数会 “偷偷” 调用私有构造函数来创建对象, 并将其保存在一个静态成员变量中。 此后所有对于该函数的调用都将返回这一缓存对象。
如果你的代码能够访问单例类, 那它就能调用单例类的静态方法。 无论何时调用该方法, 它总是会返回相同的对象。
Demo
#include <stdio.h>
#define SINGLETON Singleton::GetInstance()
//类声明
class Singleton
{
public:
// 静态方法获取对象,第一次调用的话,是创建对象
static Singleton *GetInstance();
void SingletonMethod();
protected:
static Singleton* singleton;
int mValue = 5;
};
Singleton* Singleton::singleton = nullptr;
// 类定义
Singleton *Singleton::GetInstance()
{
if(singleton == nullptr) {
singleton = new Singleton();
}
return singleton;
}
// 举个例子,如果是获取系统的某些值,就很适合用单例
void Singleton::SingletonMethod()
{
printf("I am a Singleton, vlaue is:%d\n", mValue);
}
int main(int argc , char ** argv)
{
SINGLETON->SingletonMethod();
return 0;
}