设计模式详解:单例(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 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
十二星座男生性格大揭秘:从水瓶到双鱼,每个星座都有其迷人之处
辟谣:正规渠道娃娃菜安全无毒,可放心食用
从“种豆南山”到生态哲学:陶渊明田园诗的现代启示
陶渊明<归园田居>:1600年前的诗句道出都市人的心声
十二星座恋爱雷区大揭秘!
金牛、处女、水瓶:谁是社交中最"吃力"的星座?
星座性格与心理行为:巴纳姆效应的科学解读
《王者战魂》:十二星座专属职业指南
从辅食到成人餐:鸡汁翡翠娃娃菜的制作秘诀
天津必打卡景点推荐:意式风情区、古文化街、鼓楼
天津之眼:最美夜景拍摄攻略
打卡天津五大历史文化遗迹
陶渊明的田园诗,现代人的心灵解压术
《归去来兮辞》:陶渊明的田园归隐与心灵自由
40岁辞官归隐,陶渊明如何开创中国田园诗派
赛博朋克遇上老贵阳:青云路夜市成国家级文旅集聚区
夜游贵阳:三处必去夜市与两道必吃名小吃
默沙东启动九价HPV疫苗单剂接种试验,或颠覆传统三剂方案
出门在外也要注意卫生,看看如何在公共场所维护健康
医生详解“头孢配酒”风险:这些药物都会引起双硫仑样反应
服头孢期间禁酒,否则影响药效还伤肝
南京中山植物园红枫岗:百种槭树与亭桥相映,冬日赏枫胜地
中山植物园红枫岗进入最佳观赏期,100余种槭树等你来
2035年我国银发经济规模将达30万亿元 老年营养保健食品成银发经济新引擎
综合素质教育:培养全面发展人才
德智体美劳,“五好学生”评选标准这样定
神农架滑雪场安全攻略:装备选购到应急处理
神农架滑雪场:7000米雪道,打造最暖团队建设基地
蜂胶的健康益处与食用指南
锡的毒性真相,健康使用全攻略