设计模式详解:单例(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 类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
电子作业票:非常规作业管理的数字化解决方案
儿童房墙面颜色如何选择?这份专业指南请收好
羽毛球为什么是16根羽毛?如何选到快、稳、准的羽毛球?
如何评估光电企业的市场表现?这种评估方法有哪些技术指标?
手指外伤怎么办?这份实用指南请收好
OpenWrt升级时遇到的常见问题及解决方法
睡不好觉眼睛累怎么办
中美俄加油机最大载油量对比:俄106吨,美96吨,中国有多少?
绍兴黄酒酿造技艺:国家级非物质文化遗产的传承与创新
怎么避免婚后财产继承纠纷
浓香黑芝麻糊
国考成绩为何没有显示排名?
2024中国高职院校产教融合竞争力排名发布:江苏农林职院蝉联榜首
金发晶五行补金补水吗?金发晶适合什么五行的人佩戴?
吕不韦:从富商到丞相的历史传奇
怀孕唐氏筛查怎样可以保证准确性?
打造枫桥式派出所 多维发力书写基层治理新篇章
法系车的优缺点,法系车发动机耐用吗
【以案说医】化痰熄风、健脾祛湿治疗高血压病
探索历史人物张角的真实面貌与潜在地位
操作台人机工程学要求有哪些?
探索翡翠昆虫:意义、象征与文化内涵解析
钢铁是怎样炼成的故事梗概
空调直吹怎么解决
苍耳的功效与作用:从腰腿痛到鼻炎的多重药用价值
提示词优化
道教文化探秘:道士佩戴的手串种类及其含义
髌骨骨折术后膝盖僵硬的消除办法
履约保证金:定义、比例、退还时间及法律规定
如何在股市中制定有效的解套策略?这种策略的实施需要注意什么?