【C++设计模式】 单例
程序员文章站
2022-06-19 15:13:55
定义GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。类图步骤构造函数私有化提供全局静态方法类内定制指针,指向本类;懒汉式单例在调用getInstance()方法时才创建对象,饿汉式会创建一个全局变量,调用getInstance()方法返回这个全局变量;懒汉式代码:#include #include using namespace std;// 临界区, 用于解决多线程...
定义
GoF对单例模式的定义是:保证一个类、只有一个实例存在,同时提供能对该实例加以访问的全局访问方法。
类图
步骤
- 构造函数私有化
- 提供全局静态方法
- 类内定制指针,指向本类;懒汉式单例在调用
getInstance()
方法时才创建对象,饿汉式会创建一个全局变量,调用getInstance()
方法返回这个全局变量;
懒汉式
代码:
#include <iostream>
#include <mutex>
using namespace std;
// 临界区, 用于解决多线程问题
static mutex cs;
class Singleton {
private:
// 1. 构造函数私有化
Singleton() {
}
public:
// 2. 提供静态全局方法获取对象
static Singleton *getInstance() {
if (pInstance == nullptr) { // 临界区需要二次判断,避免重复创建对象
cs.lock(); // 只有当pInstance等于null时,才开始使用枷锁机制 二次检查
if (pInstance == nullptr) {
pInstance = new Singleton();
}
cs.unlock();
}
return pInstance;
}
// 4. 提供静态方法,用于释放内存
static void FreeInstance() {
if (pInstance != nullptr) {
delete pInstance;
pInstance = nullptr;
}
}
private:
// 3.1 静态指针,指向本类对象; 类内声明,类外初始化;
static Singleton *pInstance;
};
// 3.2 静态指针, 类外初始化;
Singleton *Singleton::pInstance = nullptr;
调用
Singleton *p = Singleton::getInstance();
饿汉式
#include <iostream>
#include <mutex>
using namespace std;
// 临界区, 用于解决多线程问题
static mutex cs;
class Singleton {
private:
// 1. 构造函数私有化
Singleton() {
pInstance = nullptr;
}
public:
// 2. 提供静态全局方法获取对象
static Singleton *getInstance() {
// 饿汉式单例
return pInstance;
}
// 4. 提供静态方法,用于释放内存
static void FreeInstance() {
if (pInstance != nullptr) {
delete pInstance;
pInstance = nullptr;
}
}
private:
// 3.1 静态指针,指向本类对象; 类内声明,类外初始化;
static Singleton *pInstance;
};
// 3.2 静态指针, 类外初始化;
Singleton *Singleton::pInstance = new Singleton; // 相当于全局变量
调用
Singleton *p = Singleton::getInstance();
本文地址:https://blog.csdn.net/qq_43288972/article/details/112252913
上一篇: 设计模式之 Factory(简单工厂模式)通俗理解
下一篇: 单例模式的了解