【设计模式】单例模式-学习记录

什么是单例

单例模式是一种创建型设计模式,核心思想为一个类只有一个实例,并提供一个全局访问点来访问这个实例。

只一个实例就是在整个应用程序中,只存在该类的一个实例对象,而不是创建多个相同类型的对象。

全局访问点的意思是,为了让其他类能获取这个唯一的实例,该类提供了·一个全局访问点(通常是一个静态方法),就能获得实例。

为什么要用单例设计模式?

单例模式有以下几个优点让我们来考虑使用它:

  • 全局控制:只有一个实例可以严格控制客户怎样访问它以及何时访问它
  • 节省资源:避免多次创建相同的对象,多个模块可以通过单例实例共享数据
  • 懒加载:可以实现懒加载,只有在需要时才进行实例化,无疑会提高程序的·性能。

单例模式的基本要求

私有的构造函数:防止外部直接创建类的实例

私有的静态实例变量:保存该类的唯一实例

公有的静态方法:通过公有的静态方法来获取类的实例

单例模式的实现有懒汉模式,饿汉模式。

饿汉模式:在类加载时就已经完成实例的创建

饿汉模式:需要时再创建

在多线程环境下,由于饿汉式在程序启动阶段就完成了实例的初始化,因此不存在多个线程同时尝试初始化实例的问题,但是懒汉式中多个线程同时访问 getInstance() 方法,并且在同一时刻检测到实例没有被创建,就可能会同时创建实例,从而导致多个实例被创建,这种情况下我们可以采用一些同步机制,例如使用互斥锁来确保在任何时刻只有一个线程能够执行实例的创建。

1、饿汉模式:实例在类加载时就被创建,可能没有使用而造成资源浪费

class Singleton{
public:
    static Singleton instance;
    return instance;
};
private:
    Singleton(){}//私有构造方法
    Singleton(const Singleton&)=delete;//删除拷贝构造函数
    Singleton& operator=(const Singleton&)=delete;//删除赋值运算符

2.懒汉模式,可以使用双重检查锁提高性能

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

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

FANUC机器人初始化系统的基本方法和步骤

FANUC机器人初始化系统的基本方法和步骤 首先,在做系统初始化之前,必须做好系统的备份,这里做个镜像备份,更详细的镜像备份步骤可参考以下链接中的内容: FANUC机器人进行全部备份和镜像备份以及加载备份文件的具体操作(图文) 如下图所示,在示教器右边的USB接口上插个…

记录用python跑csdn点赞接口

代码如下 # 导入request包 import requests # 请求URL URL3https://blog.csdn.net//phoenix/web/v1/article/like # 入参 data3{articleId:109552419} # 请求头 headers3{cookie:uuid_tt_dd10_30308678820-1713771851124-190368; loginbox_strategy%7B%22taskId%22%3A349%2C%2…

1755jsp学生信息管理系统Myeclipse开发mysql数据库web结构java编程计算机网页项目

一、源码特点 java 学生信息管理系统 是一套完善的web设计系统,对理解JSP java编程开发语言有帮助,系统具有完整的源代码和数据库,系统采用web模式,系统主要采用B/S模式开发。开发环境为TOMCAT7.0,Myeclipse8.5开发,…

酷开科技丨女性群像大戏《惜花芷》在酷开系统热播中

在这个国产剧市场蓬勃发展的时代,酷开科技通过其生态智能电视系统,为剧迷们打造了一个精彩的观剧平台。通过酷开科技的智能推荐算法,消费者能够轻松地发掘并观看各种题材的高质量剧集,无论是扣人心弦的金融较量、深刻的家庭代际关…

位图和布隆过滤器:位图

在《unordered_map 和 unordered_set》 中提到过: 哈希是一种思想,通过哈希函数将数据转化为一个或多个整型 —— 映射关系;通过这种映射关系,可以做到以 O(1) 的时间复杂度查找数据。 本文即将介绍的 位图 和 布隆过滤器 就是两个…

vue 微信小程序 uniapp 微信头像上传裁剪功能

效果如图&#xff1a; 操作流程&#xff1a; 个人中心–点击设置头像–选择图片-裁剪–选取–上传 template <view class"meilan" style"position: relative;"><u-row justify"space-between"><u-col span"3">设置头…

开源的图形化Windows软件安装升级方案:WingetUI

WingetUI&#xff1a;简化数字生活&#xff0c;WingetUI让软件管理轻松便捷- 精选真开源&#xff0c;释放新价值。 概览 WingetUI是在GitHub上开发的一个实用工具&#xff0c;专为Windows用户设计&#xff0c;旨在为常见的命令行包管理工具&#xff08;如Winget、Scoop、Pip、…

即刻报名:南京智博会|2024南京国际人工智能展览会

在21世纪的科技浪潮中&#xff0c;人工智能&#xff08;AI&#xff09;无疑已经跃升为一个全新的战略制高点&#xff0c;成为驱动社会经济发展的重要引擎。2024年11月&#xff0c;南京这座历史与现代交融的城市&#xff0c;将举办一场科技界的盛宴——2024南京国际人工智能展览…

指标体系建设方案(36页PPT)

一、资料介绍 《指标体系建设方案》这份36页的PPT资料包&#xff0c;是针对当前组织发展需求而精心设计的一套全面、系统的指标构建方案。本资料包从理论到实践&#xff0c;深入浅出地阐述了指标体系建设的必要性、原则、步骤及实施要点&#xff0c;旨在帮助组织建立起科学、合…

在Python中防止某些字段被Pickle序列化

在Python中&#xff0c;如果你想防止某些字段被pickle序列化&#xff0c;可以使用__reduce__()方法来自定义pickle行为。__reduce__()方法允许你返回一个元组&#xff0c;其中包含要在对象被pickle时调用的函数以及传递给该函数的参数。下面就是我遇到的问题以及最终解决方案。…

Mamba:7 VENI VIDI VICI

若在阅读过程中有些知识点存在盲区&#xff0c;可以回到如何优雅的谈论大模型重新阅读。另外斯坦福2024人工智能报告解读为通识性读物。若对于如果构建生成级别的AI架构则可以关注AI架构设计。技术宅麻烦死磕LLM背后的基础模型。 序列模型的效率与有效性之间的权衡取决于状态编…

【自然语言处理】形式语言和自动机

实验名称 形式语言和自动机 实验目的&#xff1a;熟悉形式语言和自动机&#xff0c;设计程序实现有限自动机&#xff0c;学习对字符串进行合法性检测&#xff0c;使用有限自动机判断字符串是否是可以被接受的。书写出能够成功运行的代码。 实验内容&#xff1a;状态集为{ q0,…

职业生涯第一课---“Redis分布式锁优化:确保唯一性与效率“

前言 最近因为刚入职公司开启自己的实习生涯&#xff0c;工作和毕设论文同步进行&#xff0c;导致有段时间没更新博客了&#xff0c;今天来分享一下最近学到的一些知识。 场景介绍 BOSS让我写一些接口&#xff0c;他提出这样一个需求&#xff0c;该接口的参数有多个&#xf…

linux系统查看CPU信息

1、查看cpu型号 [rootMaster ~]# cat /proc/cpuinfo | grep name | cut -f2 -d: | uniq -c 40。Intel(R) Xeon(R) CPU E5-2650 v3 2.30GHz 2、查看系统中实际物理CPU的颗数&#xff08;物理&#xff09; [rootMaster ~]# grep physical id /proc/cpuinfo | sort | uniq | w…

IT行业现状与探索未来发展趋势

​​​​​​​ 我眼中的IT行业现状与未来趋势 随着技术的不断进步&#xff0c;IT行业已成为推动全球经济和社会发展的关键力量。从云计算、大数据、人工智能到物联网、5G通信和区块链&#xff0c;这些技术正在重塑我们的生活和工作方式。你眼中IT行业的现状及未来发展趋势是…

Python函数之旅专栏(导航)

Python内置函数(参考版本:3.11.8)AELRabs( )enumerate( )len( )range( )aiter( )eval( )list( )repr( )all( )exec( )locals( )reversed( )anext( )round( )any( ) ascii( )FM  filter( )map( )S float( )max( )set( )Bformat( )memoryview( )setattr( )bin( )frozenset( )…

Spring实现数据库读写分离(MySQL实现主从复制)

目录 1、背景 2、方案 2.1 应用层解决: 2.2 中间件解决 3、使用Spring基于应用层实现 3.1 原理 3.2 DynamicDataSource 3.3 DynamicDataSourceHolder 3.4 DataSourceAspect 3.5 配置2个数据源 3.5.1 jdbc.properties 3.5.2 定义连接池 3.5.2 定义DataSource 3.6…

【Linux】线程周边001之多线程

&#x1f440;樊梓慕&#xff1a;个人主页 &#x1f3a5;个人专栏&#xff1a;《C语言》《数据结构》《蓝桥杯试题》《LeetCode刷题笔记》《实训项目》《C》《Linux》《算法》 &#x1f31d;每一个不曾起舞的日子&#xff0c;都是对生命的辜负 目录 前言 1.线程的理解 2.地址…

停车场车位引导管理系统工作原理是什么,由哪些软硬件设备组成?

在现代城市中&#xff0c;随着汽车保有量的持续增长&#xff0c;停车难成为了许多城市面临的共同问题。有效管理停车场资源&#xff0c;提高车位利用率&#xff0c;减少寻找停车位的时间&#xff0c;对于缓解交通拥堵、提高城市运行效率具有重要意义。车位引导管理系统正是为了…

YOLOv8改进 | 图像修复 | 适用多种复杂场景的全能图像修复网络AirNet助力YOLOv8检测(全网独家首发)

一、本文介绍 本文给大家带来的改进机制是一种适用多种复杂场景的全能图像修复网络AirNet&#xff0c;其由对比基降解编码器&#xff08;CBDE&#xff09;和降解引导修复网络&#xff08;DGRN&#xff09;两个神经模块组成&#xff0c;能够在未知损坏类型和程度的情况下恢复受…