一、原理讲解
由于单件模式也称为单例模式,分为懒汉式单例模式和饿汉式单例模式,两者主要区别是类对象的返回是在编译时创建?还是调用时才创建?其中,懒汉式单例模式是在程序调用时才创建,而饿汉式单例模式是在程序编译时期创建类实例。懒汉式是非线程安全的,而饿汉式是线程安全的。因为项目中用懒汉式比较多,所以本文主要总结的是懒汉式单例模式。饿汉式单例模式可以参考博主这篇文章:Qt5.9中单例模式用法(饿汉模式、懒汉模式,C++语言)
1.1意图
保证一个类仅有一个实例,并提供一个访问它的全局访问点。
1.2应用场景
- 当一个类只有一个实例,而且客户端可以从一个众所周知的访问点访问它时;
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无须更改代码就能使用一个扩展的实例时;
1.3结构图(UML图)
1.4代码实现步骤
a1 定义一个具体类Singleton,将构造函数变成私有;
a2 定义一个私有静态成员变量singleton和共有静态函数getSingleton,函数getSingleton返回类Singleton的静态成员变量singleton,从而获取到该类唯一实例。
二、实现代码
2.1 简单版单例模式
Singleton.cpp
#include <iostream>
using namespace std;
class Singleton {
public:
static Singleton* getSingleton() {
if (singleton == nullptr) {
singleton = new Singleton();
}
return singleton;
}
void show() {
cout << "Singleton" << endl; }
private:
static Singleton *singleton;
Singleton