当前位置: 首页 > news >正文

单例模式的使用场景 以及 饿汉式写法(智能指针)

单例模式的使用场景 以及 饿汉式写法(智能指针)

      • 饿汉式:创建类时就已经创建好了类的实例(用智能指针实现)
      • 什么时候用单例模式:
        • 1. 全局配置管理
        • 2. 日志系统
        • 3. 资源管理器
        • 4. 硬件设备访问
        • 总结

饿汉式:创建类时就已经创建好了类的实例(用智能指针实现)

#include <memory>
class Single
{
private:Single(){}~Single(){}Single(const Single& single)=delete;Single& operator=(const Single& single)=delete;
private:static std::shared_ptr<Single> singlePtr;
public://获取实例static std::shared_ptr<Single>& getInstance(){return singlePtr;}
};
std::shared_ptr<Single> singlePtr=std::make_shared<Single>();

什么时候用单例模式:

1. 全局配置管理

当需要集中管理 全局配置数据 时(如数据库连接参数、系统路径配置),使用单例模式可确保所有模块访问的是同一份配置数据。例如:

class ConfigManager {
public:static ConfigManager& getInstance() {static ConfigManager instance;return instance;}std::string getValue(const std::string& key) const;
private:std::unordered_map<std::string, std::string> configMap;
};

所有组件通过ConfigManager::getInstance()获取统一配置

2. 日志系统

日志记录器需要保证 全局唯一的输出通道,避免多线程环境下 日志文件被重复打开:

Logger::getInstance().writeLog("System initialized");

这里的单例就是指唯一的日志输出通道

3. 资源管理器

管理数据库连接池、线程池等稀缺资源时,单例模式可确保 资源分配策略 的一致性:

ConnectionPool& pool = ConnectionPool::getInstance();
auto conn = pool.getConnection(); // 统一分配连接

这个单例就是这个线程池

4. 硬件设备访问

对打印机、串口等独占式硬件设备的访问控制,单例模式能防止设备冲突:

SerialPort::getInstance().sendData(dataBuffer);
类似于管理日志输出通道
总结

如果确定这个类的实例 在全局只有一个,那么就可以试试单例模式,总归有好处。另外,饿汉式 启动时(即加载类时)立即初始化,适合资源预分配场景。懒汉式 延迟初始化,首次调用时创建,节省启动时间。

相关文章:

  • LangChain、LlamaIndex 和 ChatGPT 的详细对比分析及总结表格
  • 【AI News | 20250421】每日AI进展
  • 如何将Qt程序打包成应用程序?
  • visionpro案例: 轴承缺珠检测
  • Java学习手册:Cookie 与 Session 管理
  • HOW MUCH POSITION INFORMATION DO CONVOLUTIONAL NEURAL NETWORKS ENCODE?
  • web原生API AbortController网络请求取消方法使用介绍:防止按钮重复点击提交得最佳方案
  • 总结设计测试用例的万能公式
  • 基于LLM的响应式流式处理实践:提升用户体验的关键技术
  • 算法 | 鲸鱼优化算法(WOA)原理,公式,应用,算法改进研究综述,完整matlab代码
  • 测试用例书写规范详解:构建高效测试体系的基础
  • STM32H5开发陀螺仪LSM6DSV16X(3)----SFLP获取四元数
  • spring boot使用Scheduling实现动态增删启停定时任务
  • 8051单片机所有Keil C51汇编伪指令和C语言关键字大全
  • DAG(有向无环图)计算模型面试内容整理-DAG的特点和应用场景
  • Python第一周作业
  • 大模型学习笔记 day01 提示工程入门1.One-shot Few-shot提示学习法
  • XSS详解
  • Oracle RMAN同步数据库Active database duplicate
  • Elasticsearch中的_source字段讲解
  • 年近九旬的迪图瓦,指挥能量比盛年更为强劲
  • 国家开发银行原副行长李吉平一审获刑14年
  • 纪念沈渭滨︱在恩师沈渭滨老师指导下走上学术研究之路
  • 海南开展药品安全“清源”行动,严查非法渠道购药等违法行为
  • 云南省交通发展投资有限责任公司原党委书记、董事长陈以东接受审查调查
  • 青创上海—2025浦东徒步行活动举行,“青年草坪创新创业湃对”正式亮相