设计模式-5.单例(Singleton)C++实现
创作时间:
作者:
@小白创作中心
设计模式-5.单例(Singleton)C++实现
引用
CSDN
1.
https://blog.csdn.net/qq_39071254/article/details/138992224
单例模式是一种常见的设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式在需要控制资源访问或配置全局状态的场景中非常有用。本文将详细介绍单例模式的概念、实现方法以及使用时需要注意的问题。
5.设计模式名称:单例(Singleton)
概念
单例模式是一种创建型设计模式,用于确保一个类只有一个实例,并提供一个全局访问点。这种模式确保全局有一个单一的实例,并且这个实例可以在整个程序中方便地访问。
意图
- 确保一个类仅有一个实例,并提供一个全局访问点。
- 控制资源的访问,如数据库或文件的连接。
适用性
- 当类只能有一个实例而客户可以从一个众所周知的访问点访问它时。
- 当这个唯一实例应该是通过子类化可扩展的,并且客户应该无需修改代码就能使用一个扩展的实例时。
结构
单例模式通常只涉及一个角色:
- 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 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
从癌症到病毒感染:自噬机制在疾病治疗中的新突破
多孔吸音导热低,矿棉板成家装隔音隔热新选择
超纤皮革引领绿色家居新潮流
最新研究:抗抑郁药物并非通过提升血清素水平起效
排列五第25012期开奖:47168,单注奖金10万元
Nature最新研究:抑郁症患者脑部额-纹状体网络显著扩张
抑郁症致海马体萎缩,四类干预助大脑恢复
无创精准调节大脑活动,时间干涉刺激技术为抑郁治疗带来新希望
2025年3月起PHEV取消免检,新增电池安全检测
国五排放标准年检攻略:检测流程、准备事项全解析
韩非子的“刑无等级”思想:从战国到现代的法治启示
暖心暖胃!淄博5种地道美食驱赶冬日严寒
成都刘氏庄园博物馆最佳打卡路线
刘氏庄园:全国重点文物保护单位
大邑刘氏庄园:一座承载历史记忆的川西庄园
沪苏湖高铁年底开通,长三角加速构建“环太湖高铁圈”
解密三角形:三个定理串联数学与现实
经期可以服用益生菌吗?专家:有助于改善肠道不适
《水浒传》三大帅哥绰号揭秘:燕青、张顺、武松
空气炸锅食谱大全:9道美食让你一周不重样!
消暑养心:植物治疗师推荐的夏季草本茶配方
茶叶营养解析:茶多酚抗氧化,科学饮用更健康
冬季饮用桑葚茶:6种功效搭配全攻略
玫瑰花茶到决明子茶:四款茶饮助力心脏肝肾健康
托帕石辐照改色安全无忧,海关严格检测把关
你家宝宝有没有这些脐疝预防误区?
宝宝脐疝护理全攻略:新手爸妈必看!
2025年最流行的5种发型,减龄又好看
发型与服装搭配:提升整体形象的小妙招
孔子思想的现代启示录