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

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

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

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

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2058552.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

锐特驱动器ECR系列IO输出高电平配置

设置极性:常闭值0 默认输出极性常开,平时高组态或无电平输出,点通工作时输出低电平;常闭平时低电平,工作时输出高电平; 常开常闭概念具体可参考: http://t.csdnimg.cn/TIsW9 设置输出功能&…

如何用Java SpringBoot+Vue搭建校内跑腿业务系统?实战教程解析

✍✍计算机毕业编程指导师 ⭐⭐个人介绍:自己非常喜欢研究技术问题!专业做Java、Python、微信小程序、安卓、大数据、爬虫、Golang、大屏等实战项目。 ⛽⛽实战项目:有源码或者技术上的问题欢迎在评论区一起讨论交流! ⚡⚡ Java、…

​​​​​​​STM32通过SPI硬件读写W25Q64

目录 STM32通过SPI硬件读写W25Q64 1. STM32的SPI外设简介 2. STM32的SPI框图 2.1 数据寄存器和移位寄存器(左上角部分) 控制逻辑(其余右下角的部分) 3.STM32的SPI基本框图 4. STM32的SPI主模式全双工连续传输 时序图 5. S…

网安新声 | 从微软“狂躁许可”漏洞事件看安全新挑战与应对策略

网安加社区【网安新声】栏目,汇聚网络安全领域的权威专家与资深学者,紧跟当下热点安全事件、剖析前沿技术动态及政策导向,以专业视野和前瞻洞察,引领行业共同探讨并应对新挑战的策略与可行路径。 近期,微软披露了一个最…

AIGC企业知识库系统的全方位应用

在知识爆炸的时代,企业如同航行在浩瀚信息海洋中的巨轮,每一滴知识的浪花都可能成为推动其破浪前行的动力。而 AIGC企业知识库系统可以帮助企业精准捕捞、高效利用这些宝贵资源,不仅重塑了企业知识管理的版图,更引领了一场前所未有…

秋招力扣Hot100刷题总结——回溯

回溯问题通常应用于解决排列组合等问题,需要注意的是回溯函数中的参数、结束条件、遍历开始顺序等。 回溯三部曲: (1)确定递归函数的参数。 (2)确定递归函数的终止条件。 (3)确定单层…

错误:Input string was not in a correct format.

之前写的桌面端,在国内客户电脑运行着没问题,到欧洲国家电脑上就挂掉了 原因:TM 小数点不是. 而是, 是逗号,不明觉厉 解决办法: 1、更改客户电脑配置 这里把逗号改成.就行了 但是这种办法比较笨,总不能…

视频检索技术为电子商务直播领域带来了前所未有的革新

视频检测在这个场景中指的是通过视频流实时识别和检索直播中销售人员展示的商品。这涉及到从连续的视频帧中分析和识别商品的视觉内容,通常与语音和文本数据结合,以提高识别准确性。 技术原理 文本引导的注意机制:这一机制通过直播中销售人员…

初始redis:List

列表 List 相当于数组或者顺序表。 对于List来说,两侧都可以插入和删除,时间复杂度是O(1)。 有很多的操作,比如 llen 可以获取List的长度,lrem 可以删除元素 ,lrange可以去一个字符串 , lindex可以根据下标…

MBR20100FCT-ASEMI无人机专用MBR20100FCT

编辑:ll MBR20100FCT-ASEMI无人机专用MBR20100FCT 型号:MBR20100FCT 品牌:ASEMI 封装:TO-220F 批号:最新 恢复时间:35ns 最大平均正向电流(IF):20A 最大循环峰值…

Leetcode344. 反转字符串(双指针-对撞)

题目描述: 编写一个函数,其作用是将输入的字符串反转过来。输入字符串以字符数组 s 的形式给出。 不要给另外的数组分配额外的空间,你必须原地修改输入数组、使用 O(1) 的额外空间解决这一问题。 示例: 示例 1: 输…

比铁饭碗还好的专业,未来人才缺口超大,而且就业压力还小!

高考是许多学生心中的一件大事,高考成绩的好坏,直接决定着进入什么样的大学,或者选择什么样的专业。**而且在当今这个日新月异的时代,选择一个既有发展前景又相对稳定的职业成为了许多学生和家长的关注焦点。**其实我国有部分大学…

Python爬虫——简单网页抓取(实战案例)小白篇

Python 爬虫是一种强大的工具,用于从网页中提取数据。这里,我将通过一个简单的实战案例来展示如何使用 Python 和一些流行的库(如 requests 和 BeautifulSoup)来抓取网页数据。 实战案例:抓取一个新闻网站的头条新闻标…

UIAbility组件的启动模式

UIAbility的启动模式是指UIAbility实例在启动时的不同呈现状态。针对不同的业务场景,系统提供了三种启动模式: 1、singleton启动模式 单实例模式,也是默认情况下的启动模式。系统中只存在唯一一个该UIAbility实例,即在最近任务列…

BMS杂谈1

1、LTC凌特和ADI是一家 凌力尔特(Linear Technology)是一家模拟芯片公司,成立于1981年,由‌Bob Swanson和‌Bob Dobkin创立,总部位于硅谷。2016年,凌力尔特被ADI公司以约150亿美元的价格收购。收购完成后&a…

如何免费获取乡镇级边界数据geoJson数据

如何免费获取乡镇级边界数据geoJson数据 我们可以通过 阿里云数据可视化平台 ,可以获取到中国各个省份/区级/县级的json数据,但是区级和县级,并没有包含街道和乡镇的数据 获取乡镇级边界数据 1.下载bigemap全能版 安装好后选择你要导出的…

数据链路层 III(介质访问控制)【★★★★★】

(★★)代表非常重要的知识点,(★)代表重要的知识点。 介质访问控制所要完成的主要任务是:为使用介质的每个结点隔离来自同一信道上其他结点所传送的信号,以协调活动结点的传输。 下图所示是广播…

实测可用,ComfyUI工作流:个性二维码设计

前言 ComfyUI工作流:个性二维码设计 朋友们,还在花钱去找别人设计二维码吗? 其实只需要一个comfyui工作流就能解决了。 你是否想过,通过简单的文本描述就能生成惊艳的视觉效果?又或者,你是否想过将二维码…

[数据集][目标检测]道路积水检测数据集VOC+YOLO格式2699张1类别

数据集格式:Pascal VOC格式YOLO格式(不包含分割路径的txt文件,仅仅包含jpg图片以及对应的VOC格式xml文件和yolo格式txt文件) 图片数量(jpg文件个数):2699 标注数量(xml文件个数):2699 标注数量(txt文件个数):2699 标注…

Leetcode Java学习记录——动态规划基础

概念 首先想到递归、分治。动态规划本质也一样。 共性:找到重复子问题 差异性:有最优子结构,中途可以淘汰次优解。 动态规划是分治最优子结构。 例题 斐波那契数列 递归实现,时间复杂度是指数级。 最基础的写法为 int fib(i…