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

C++ 设计模式(1. 单例模式)

  • 单例模式是一种创建型设计模式, 它的核心思想是保证一个类只有一个实例,并提供一个全局访问点来访问这个实例。
    • 特点
      • 全局访问点的意思是,为了让其他类能够获取到这个唯一实例,该类提供了一个全局访问点(通常是一个静态方法),通过这个方法就能获得实例。
      • 只有一个实例的意思是,在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象。
    • 优点
      • 全局控制:保证只有一个实例,这样就可以严格的控制客户怎样访问它以及何时访问它,简单的说就是对唯一实例的受控访问(引用自《大话设计模式》第21章)
      • 节省资源:也正是因为只有一个实例存在,就避免多次创建了相同的对象,从而节省了系统资源,而且多个模块还可以通过单例实例共享数据。
      • 懒加载:单例模式可以实现懒加载,只有在需要时才进行实例化,这无疑会提高程序的性能。
    • 单例设计模式的基本要求
      • 私有的构造函数:防止外部代码直接创建类的实例

      • 私有的静态实例变量:保存该类的唯一实例
      • 公有的静态方法:通过公有的静态方法来获取类的实例

    • 实现
      • 单例模式的实现方式有多种,包括懒汉式、饿汉式等。
      • 饿汉式指的是在类加载时就已经完成了实例的创建,不管后面创建的实例有没有使用,先创建再说,所以叫做 “饿汉”。
      • 而懒汉式指的是只有在请求实例时才会创建,如果在首次请求时还没有创建,就创建一个新的实例,如果已经创建,就返回已有的实例,意思就是需要使用了再创建,所以称为“懒汉”。
        • 在多线程环境下,由于饿汉式在程序启动阶段就完成了实例的初始化,因此不存在多个线程同时尝试初始化实例的问题,但是懒汉式中多个线程同时访问 getInstance() 方法,并且在同一时刻检测到实例没有被创建,就可能会同时创建实例,从而导致多个实例被创建,这种情况下我们可以采用一些同步机制,例如使用互斥锁来确保在任何时刻只有一个线程能够执行实例的创建。

相关文章:

  • 北京网站建设多少钱?
  • 辽宁网页制作哪家好_网站建设
  • 高端品牌网站建设_汉中网站制作
  • 数据库E-R 图
  • Total Commander 右键卡死问题,百度云冲突
  • Yolov10网络详解与实战(附数据集)
  • 软件测试-测试分类
  • Linux云计算 |【第二阶段】SECURITY-DAY4
  • Big Data for AI实践:面向AI大模型开发和应用的大规模数据处理套件
  • 超声波模块HC_SR04(hal库)
  • 【图像超分】论文精读:AdaBM: On-the-Fly Adaptive Bit Mapping for Image Super-Resolution
  • 向量数据库中的PQ(Procduct Quantization)
  • zabbix通过snmp监控物理服务器硬件信息
  • Win10安装ChatTTS-2024-cuda10.1
  • 数据结构预备知识
  • 链表反转算法
  • 12.2 使用prometheus-sdk向pushgateway打点
  • Unity编辑器扩展:创建一个欢迎窗口,在启动Editor的时候显示自定义窗口。
  • 【Amaple教程】5. 插件
  • 【前端学习】-粗谈选择器
  • 【跃迁之路】【463天】刻意练习系列222(2018.05.14)
  • bearychat的java client
  • Linux中的硬链接与软链接
  • SpringBoot几种定时任务的实现方式
  • 聊聊directory traversal attack
  • 每个JavaScript开发人员应阅读的书【1】 - JavaScript: The Good Parts
  • 爬虫进阶 -- 神级程序员:让你的爬虫就像人类的用户行为!
  • 如何进阶一名有竞争力的程序员?
  • 如何学习JavaEE,项目又该如何做?
  • 看到一个关于网页设计的文章分享过来!大家看看!
  • CMake 入门1/5:基于阿里云 ECS搭建体验环境
  • 浅谈sql中的in与not in,exists与not exists的区别
  • !!Dom4j 学习笔记
  • # 服务治理中间件详解:Spring Cloud与Dubbo
  • #{} 和 ${}区别
  • #android不同版本废弃api,新api。
  • #绘制圆心_R语言——绘制一个诚意满满的圆 祝你2021圆圆满满
  • (arch)linux 转换文件编码格式
  • (超详细)语音信号处理之特征提取
  • (二)构建dubbo分布式平台-平台功能导图
  • .net core MVC 通过 Filters 过滤器拦截请求及响应内容
  • .Net Core 微服务之Consul(二)-集群搭建
  • .Net Core中Quartz的使用方法
  • .NET(C#) Internals: as a developer, .net framework in my eyes
  • .net安装_还在用第三方安装.NET?Win10自带.NET3.5安装
  • .net反混淆脱壳工具de4dot的使用
  • .Net高阶异常处理第二篇~~ dump进阶之MiniDumpWriter
  • .NET中GET与SET的用法
  • @Autowired自动装配
  • @DataRedisTest测试redis从未如此丝滑
  • @在php中起什么作用?
  • [ CTF ] WriteUp- 2022年第三届“网鼎杯”网络安全大赛(白虎组)
  • []C/C++读取串口接收到的数据程序
  • [2013][note]通过石墨烯调谐用于开关、传感的动态可重构Fano超——
  • [383] 赎金信 js
  • [Arduino学习] ESP8266读取DHT11数字温湿度传感器数据
  • [BJDCTF2020]Easy MD51
  • [bzoj4240] 有趣的家庭菜园