C++二十三种设计模式之单例模式
C++二十三种设计模式之单例模式
- 一、组成
- 二、特点
- 三、目的
- 四、缺点
- 五、示例代码
一、组成
单例类:主要包含私有静态实例变量、公共静态方法、线程安全机制(可选)、序列化控制(可选,将对象的状态保存到存储介质中,如网络或文件)、反序列化(可选,即从存储介质中重新恢复对象的状态)。
二、特点
1、在一个进程下只实例出一个对象。
2、构造函数私有化,防止外部实例化。
3、使用静态实例变量和公共静态方法,来提供全局访问点。从而保证只有一个实例。
4、实例化对象的时机分两种:饿汉(发出了该类的需求就实例化对象)和懒汉(用到该对像才实例化对象)。
三、目的
确保一个类只有一个实例。
四、缺点
1、违反软件设计中单一职责原则,创建实例和业务逻辑在一个类中。
2、不适用于多线程环境,如果没有对创建实例和访问实例加锁会导致线程安全问题出现。
五、示例代码
#include<iostream>
#include <vector>
#include <string>
#include <mutex>
using namespace std;
class Singleton {
Singleton() {}
~Singleton() {}
Singleton(const Singleton&) = delete;
Singleton& operator=(const Singleton&) = delete;
//声明
static Singleton* data;//私有静态实例变量
static mutex mtx;
public:
static Singleton* GetInstance() {//公共静态方法
unique_lock<mutex> lock(mtx);
if (data == nullptr) {
data = new Singleton();
lock.unlock();
}
return data;
}
};
//初始化类静态变量
Singleton* Singleton::data = nullptr;
mutex Singleton::mtx;
int main() {
Singleton* temp = Singleton::GetInstance();
}