设计模式详解:单例(Singleton)C++实现
创作时间:
作者:
@小白创作中心
设计模式详解:单例(Singleton)C++实现
引用
CSDN
1.
https://blog.csdn.net/qq_39071254/article/details/138992224
单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源访问或配置全局状态的场景中非常有用。本文将详细介绍单例模式的概念、实现方法以及在C++中的具体应用。
概念
单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式确保全局有一个单一的实例,并且这个实例可以在整个程序中方便地访问。
意图
- 确保一个类仅有一个实例,并提供一个全局访问点。
- 控制资源的访问,如数据库或文件的连接。
适用性
- 当类只能有一个实例而客户可以从一个众所周知的访问点访问它时。
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需修改代码就能使用一个扩展的实例时。
结构
单例模式通常只涉及一个角色:
- Singleton:负责创建自己的唯一实例,并提供一个访问该实例的全局访问点。
实现代码示例
以下是使用 C++ 实现单例模式的一个示例,它包含线程安全的懒加载(延迟实例化)机制:
#include <iostream>
#include <mutex>
// Singleton
class Singleton {
private:
static Singleton *instance;
static std::mutex mutex;
protected:
Singleton() = default;
~Singleton() = default;
Singleton(const Singleton &) = delete;
Singleton &operator=(const Singleton &) = delete;
public:
static Singleton *getInstance() {
std::lock_guard<std::mutex> lock(mutex);
if (instance == nullptr) {
instance = new Singleton();
}
return instance;
}
void doSomething() {
std::cout << "Doing something..." << std::endl;
}
};
// 必须在类外定义静态变量
Singleton *Singleton::instance = nullptr;
std::mutex Singleton::mutex;
// Client code
int main() {
Singleton *singleton = Singleton::getInstance();
singleton->doSomething();
return 0;
}
输出:
Doing something...
在这个示例中,Singleton 类包含一个静态私有成员 instance,它持有类的唯一实例。getInstance() 方法提供了一个全局访问点,并使用互斥锁确保多线程环境下的线程安全。doSomething() 方法是 Singleton 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
水痘患者如何自愈心理?
秋冬水痘高发季:接种疫苗防传染
水痘康复期:如何快速恢复正常生活?
春节归家:职场新人如何应对家庭期待?
春节返乡潮遇冷:打工人账单里的无奈与选择
《甄嬛传》作者教你写好小说大纲
网文平台热推:如何写出爆红小说大纲?
从《烟火人家》看生活中的写作灵感
武汉三鲜豆皮:百年传承的美食传奇
许文强原型揭秘:杜月笙还是许宝初?
周润发版许文强:不朽的经典传奇
《上海滩》许文强:一个理想主义者的现实困境
周润发版许文强:经典再现,谁还能超越?
周润发版许文强:一个时代的经典
梦见家中亲人:周公解梦中的象征意义与情感内涵
秋冬昼夜温差大,这样保护你我他
走进“中国温泉之乡”温汤镇:银发族乐享“硒”式养生
糖尿病患者运动控糖全攻略:牢记“13579”治疗原则
可再利用的“舍物”如何处理?5R原则助力环保生活
家里的“塑料盒”别扔,这样改造一下,比专门买的花盆还好用!
想练出完美胸肌?别忘了多吃这五种食物!
坐姿推胸机超全攻略 | 新手必看
解锁小说创作秘籍:五大要点助你成为故事大神!
水痘患者的营养早餐:八宝粥的制作与食用指南
平遥古城深度游:必打卡的日升昌票号
平遥古城摄影攻略:如何拍出高级感?
《又见平遥》:一场穿越千年的文化盛宴
成都旅游景点推荐,古都之旅,揭秘古蜀文明的发源地!
口苦怎样调理
眼科常用15种眼药水全知道