设计模式-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 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
居民医保报销全攻略:住院、门诊、异地就医一文详解
社保断缴一个月有什么影响?
用人单位不缴或少缴社保的五大套路及应对方法
白沙黎族自治县美食探店攻略:从竹筒饭到酸鱼,最地道的黎族风味都在这里
白沙黎族自治县的美食传奇:从绿茶到鱼茶肉茶
重楼:传统中药里的免疫调节新星
冬日打卡白山:长白山野生菌火锅&朝鲜族冷面
全球电气设备行业现状、产业链上下游及竞争格局分析「图」
《超级飞侠乐迪加速》:人气爆棚的手游推荐
超级飞侠新角色揭秘:谁将成为下一个飞行英雄?
世界上最大的淡水湖:苏必利尔湖
世纪凯歌号游轮:长江经济带上的绿色智能新星
他汀类药物横纹肌溶解风险全解析:症状、诊断与药物排序
宝宝嗓子痒?蜂蜜使用有讲究!
蜂蜜治疗咽喉炎:效果、使用方法与注意事项
蜂蜜+绿茶,嗓子救星!
刘晓庆再谈不生孩子:武则天和小花角色背后的抉择
高效办公神器:正点闹钟助你整点报时
华为手机整点报时设置攻略:让你的时间管理更高效
揭秘手机整点报时:从硬件原理到Multisim仿真
一文带你了解电动汽车核心部件-电池
山楂真的能降血糖吗?真相揭秘
山楂提取物:糖尿病患者的福音?
秋冬养生神器:山楂决明子泡水降血糖
山楂食疗方:科学控糖的新选择
三峡游轮预算攻略:宜昌旅游必备
长江孚泰游船省钱攻略:1050元起玩转三峡
长江探索号亲子游:如何选择适合的游轮活动?
成都宽窄巷子:川剧变脸文化之旅
《国风美少年》揭秘川剧变脸绝技