当前位置: 首页 > 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);
类似于管理日志输出通道
总结

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

http://www.xdnf.cn/news/59149.html

相关文章:

  • 批量替换多个 Word 文档中的指定图片
  • Vue的模板编译过程
  • QT写的exe嵌入到wpf中
  • 4.21 从0开始配置spark-local模式
  • django入门
  • 基于 FFmpeg 的音视频处理基础原理与实验探究
  • RocketMQ CommitLog 核心恢复机制解析:recoverNormally 如何守护消息可靠性
  • 45.[前端开发-JavaScript高级]Day10-迭代器-生成器
  • 深度学习中的归一化技术:从原理到实战全解析
  • 论文速报《Being-0:结合视觉语言模型与模块化技能的人形机器人智能体》
  • web worker
  • Spark-SQL4
  • B实验-12
  • Android(java) 接口(interface)的简单使用
  • Kotlin安卓算法总结
  • 使用谷歌浏览器自带功能将网页转换为PDF文件
  • 人工智能在智能家居中的应用与发展
  • cgroup threaded功能例子
  • 4.21 spark和hadoop的区别与联系
  • 新能源汽车零部件功率级测试方案搭建研究
  • 【PCIE730】基于PCIe总线架构的4路10G光纤通道适配器
  • 基于XC7V690T的在轨抗单粒子翻转系统设计
  • lstc_server web api接口
  • LX3-初识是单片机
  • spark
  • 全景VR是什么?全景VR有什么热门用途?
  • K8s使用LIRA插件更新安全组交互流程
  • 适配器模式:化解接口不兼容的桥梁设计
  • 若依框架免登陆、页面全屏显示、打开新标签页(看板大屏)
  • TensorFlow深度学习实战(13)——循环神经网络详解