单例模式:Singleton Pattern
使用场景:
通过单例模式可以保证系统中一个类只有一个实例而且该实例易于外界访问,从而方便对实例个数的控制并节约系统资源。如果希望在系统中某个类的对象只能存在一个,单例模式是最好的解决方案。
理由:节约资源;当实例存在多个会引起程序逻辑错误;程序意图更清晰不易被误用
实际例子:日志输出;GUI中单鼠标;操作系统窗口管理器
要求:
1. 类不能被复制
2. 类不能被公开构造
对于C++,构造函数、拷贝构造函数、赋值操作符不能被公开调用
构造其私有的构造函数,从构造时机分为两种:
1. 当需要该类的时候构造:懒汉模式
2. 程序开始之前就构造好,到时候直接调用:饿汉模式
1. 懒汉模式:静态局部变量只会被初始化一次即第一次执行的时候,生命周期与程序相同,适用于多线程
//Singleton Pattern 1: 懒汉模式
class SingleOne {
public:
static SingleOne& getInstance()
{
static SingleOne instance;
return instance;
}
int helloSingle()
{
return 1;
}
private:
SingleOne(){};
SingleOne(const SingleOne&);
SingleOne& operator=(const SingleOne&);
};
2. main 函数的外面先调用其实例的构造,静态实例的初始化, C/C++ 保证会在 main 前进行
//饿汉模式
//Singleton.h
class Singleton
{
public:
static Singleton* GetInstance();
private:
Singleton() {}
static Singleton *singleton;
SingleTwo(const SingleOne&);
SingleTwo& operator=(const SingleOne&);
};
//Singleton.cpp
Singleton* Singleton::singleton = new Singleton();
Singleton* Singleton::GetInstance()
{
return singleton;
}