设计模式详解:单例(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 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
农商银行错发催款短信的应对策略
乳品大揭秘, 各类乳制品的营养成分价值全解析
应收账款周转率的正常范围(多少合适)
李群探营西班牙尤文图特:背后的青训体系或成中国篮球新希望
减肥,与其纠结易胖体质,不如养成易瘦的行为习惯
江南四季·村游嘉兴 | 穿越时光长廊,悠游记忆深处的马鸣老街
如何分析黄金均线的技术意义?这种分析对交易策略有何影响?
混水阀安装与维修全攻略:从原理到实战详解
空调外机要不要遮挡起来?多亏空调师傅的告诫,很多人都做错了
市域机场线开跑,连接的不仅是上海
酒驾加寻衅滋事怎么处罚
刚拍的CT,换了一家医院就不能用!“重复检查”是谁的错?
北宋五子之一、著名易学大师——邵雍
包头市行政地图:内蒙古第一大城市的历史与现状
八字命理中如何识别和分析达官贵人的命格特征
每天都戴OK镜了,白天还是看不清楚怎么办
苹果锁屏总是误打开相机?这些解决方案帮你轻松应对
每天体育活动不低于2小时
如何计划去探望在澳洲留学的妹妹
「正念」是什么?专家解析正念练习,教你如何运用在日常生活中
补充能量三大秘诀:天补、自补、人补。
香葱的生长周期及其关键要素(从播种到收割,掌握香葱生长的技巧和方法)
坐月子退烧的正确方法
重新认识房地产:核心特征、估值算法、巨头们都在做什么
PCB电路板孔的分类及其功能
《李尸朝鲜》同名游戏被喷成筛子,韩国人的文化自信被打没了
如何训练幼猫上厕所?(有效的宠物卫生教育方法和技巧)
史上十大经典家具设计,件件都是艺术品
“七大硬核大学”,另一个名字叫“国防七子”,分别有什么绝活?
9999足银和S999纯银区别在哪 9999足银和S999纯银区别大吗?