设计模式-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
类的一个实例方法,可以通过全局访问点调用。
特点与考虑
单例模式提供了对唯一实例的严格控制,但也有一些潜在的问题需要考虑:
- 单例可能成为一个全局变量,使得代码之间的耦合度增加。
- 在多线程环境下,确保线程安全可能导致性能下降。
- 单例的生命周期通常贯穿整个程序,可能导致资源回收和管理上的复杂性。
这种模式在需要控制资源访问或配置全局状态的场景中非常有用,但应谨慎使用,以避免过度依赖全局状态。
热门推荐
A股、港股、港股通交易规则全解析:一文读懂三大市场!
飞星预测:揭秘你的性格密码
【可视化】2024中国大学排行榜可视化分析
张宪民:实干铸就辉煌,以产学研合作打造企业生命线
硬脂酸锌:季戊四醇生产的环保新宠?——事实核查与分析
白酒酿造工艺详解:糖化与发酵过程
ETF 的投资组合如何构建?构建投资组合时需考虑哪些因素?
小香葱:从阳台到餐桌的健康之选
秋冬种小香葱,这些技巧你必须知道!
秋冬种四川小香葱,健康生活从阳台开始!
秋冬小香葱种植技巧大揭秘!
“怡”字的意思和解释,“怡”字的成语和组词
“怡”字五行属性与吉凶:从传统文化到现代应用
怡字的演变过程及由来和意义
狐狸面具在日本文化里有什么特殊的含义么?
东莞旅游攻略,去过那么多次东莞,你去过东莞这里吗?
排草的功效与作用,使用时需要注意哪些禁忌?
正压式空气呼吸器:消防救援中的生命守护者
空气呼吸器使用指南:从结构到维护全解析
正压式消防空气呼吸器:两级减压系统的秘密
ETF是什么,散户可以交易ETF吗?一文读懂
共同基金在中国的定义是什么?这种定义有何变化?
“安”字的结构与文化内涵
CIOSH教你正确使用自给式空气呼吸器保障职业安全
消防员必备:自给开放式空呼吸器原理揭秘
自给式空气呼吸器:抗疫一线医护人员的守护神
潮汐表:港口物流中的时间管理大师
天文潮汐预警!寒潮来袭,你准备好了吗?
潮汐变化:海洋生态系统的节拍器
月亮如何影响地球上的潮汐?