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

【C++设计模式之单例模式SingletonPattern】

文章目录

  • 动机(Motivation)
  • 一、模式定义
  • 二、问题
    • 1.保证一个类只有一个实例
    • 2.为该实例提供一个全局访问节点
  • 三、结构
  • 四、代码实现


动机(Motivation)

  • 在软件系统中,经常有这样一些特殊的类,必须保证它们在系统中只存在一个实例,才能确保它们的逻辑正确性,以及良好的效率。
  • 如何绕过常规的构造器,提供一种机制来保证一个类只有一个实例?
  • 这应该是类设计者的责任,而不是使用者的责任。

一、模式定义

保证一类类仅有一个实例,并提供一个该实例的全局访问点。——《设计模式》GoF

在这里插入图片描述

二、问题

单例模式同时解决了两个问题, 所以违反了单一职责原则:
单一职责原则(SRP)

  • 一个类应该仅有一个引起它变化的原因。
  • 变化的方向隐含着类的责任。

1.保证一个类只有一个实例

  • 为什么会有人想要控制一个类所拥有的实例数量? 最常见的原因是控制某些共享资源 (例如数据库或文件) 的访问权限。
  • 它的运作方式是这样的: 如果你创建了一个对象, 同时过一会儿后你决定再创建一个新对象, 此时你会获得之前已创建的对象, 而不是一个新对象。

注意, 普通构造函数无法实现上述行为, 因为构造函数的设计决定了它必须总是返回一个新对象。
在这里插入图片描述

2.为该实例提供一个全局访问节点

  • 还记得你 (好吧, 其实是我自己) 用过的那些存储重要对象的全局变量吗? 它们在使用上十分方便, 但同时也非常不安全, 因为任何代码都有可能覆盖掉那些变量的内容, 从而引发程序崩溃。
  • 和全局变量一样, 单例模式也允许在程序的任何地方访问特定对象。 但是它可以保护该实例不被其他代码覆盖。
  • 还有一点: 你不会希望解决同一个问题的代码分散在程序各处的。 因此更好的方式是将其放在同一个类中, 特别是当其他代码已经依赖这个类时更应该如此。

三、结构

在这里插入图片描述
在这里插入图片描述
单例 (Singleton) 类声明了一个名为 get­Instance获取实例的静态方法来返回其所属类的一个相同实例。

单例的构造函数必须对客户端 (Client) 代码隐藏。 调用 获取实例方法必须是获取单例对象的唯一方式。

四、代码实现


class Singleton {
public://防止拷贝和赋值Singleton(const Singleton&) = delete;Singleton&operator=(const Singleton&) = delete;static Singleton&getInstance() {// C++11保证局部静态变量线程安全static Singleton instance;return instance;}private:Singleton() = default;~Singleton() = default;// 自动调用析构,无需手动delete
};
http://www.dtcms.com/a/600949.html

相关文章:

  • Blob格式的PDF文件调用打印,浏览器文件打印(兼容)
  • 软件单例模式
  • 微服务搭建----springboot接入Nacos2.x
  • DataWhale-HelloAgents(第二部分:大语言模型基础)
  • 批量转换论文正文引用为上标后转PDF保持上标
  • 一个简洁的独立站(带产品管理功能+双语言)
  • 阿里巴巴网站建设建议广州网页设计机构
  • Hello-agents TASK02 第三章节 大模型基础
  • 深入理解cursor 中的mcp工作原理
  • Nginx 基础教程:从安装到核心配置(视频教程)
  • 实战指南:使用 CAN FD LIN网关进行嵌入式开发与协议转换
  • Excel插件:学校成绩统计与排名介绍
  • IBMS三维可视化集成系统产品介绍
  • 网站负责人核验现场拍摄照片电子件网站建设总结经验
  • 宇宙膨胀速度的光速极限:基于张祥前统一场论的第一性原理推导与观测验证
  • Custom SRP - 14 Multiple Cameras
  • QT开发汇总(更新2025.11.12)
  • HTML5 MathML:现代网页中的数学表达利器
  • wordpress admin head简述搜索引擎优化
  • DeepSeek-OCR实战(05):DeepSeek-OCR-WebUI部署(Docker)
  • CI/CD自动化部署革命:“三分钟流水线“背后的工程实践
  • 【工具】PixPin 电脑实用截图工具!带免费OCR截图/贴图/录屏/文字识别
  • 京东关键字搜索接口逆向:从动态签名破解到分布式请求调度
  • 第三章 大语言模型基础学习笔记
  • 莱芜网站设计公司制作图片文字的软件
  • 自己做本地视频网站商城网站开发的任务书
  • 通过 API 与 Gradio 构建 AI 应用
  • 【C++进阶】二叉树进阶
  • 【C++】多态(2):纯虚函数多态底层原理
  • C++/Linux小项目:自主shell命令解释器