免费文档网站/百度推广销售员的工作内容
系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景
系列文章目录
设计模式-6大设计模式通俗易懂快速掌握
文章目录
- 系列文章目录
- 系列文章目录
- 前言
- 一、单列模式有哪几种实现?以及它们的优缺点?
- 懒汉式(Lazy Initialization):
- 饿汉式(Eager Initialization):
- 双重检查锁定(Double-Checked Locking):
- 静态内部类(Static Inner Class):
- 枚举实现
- 二、示列代码
- 懒汉式(Lazy Initialization)
- 饿汉式(Eager Initialization)
- 双重检查锁定(Double-Checked Locking)
- 静态内部类(Static Inner Class)
- 枚举实现
- 三、适用场景
- 懒汉式(Lazy Initialization):
- 饿汉式(Eager Initialization):
- 双重检查锁定(Double-Checked Locking):
- 静态内部类(Static Inner Class):
- 枚举实现:
- 总结
前言
谈到单例设计模式时,以下是几种常见的实现方式。以及它们的优缺点
一、单列模式有哪几种实现?以及它们的优缺点?
懒汉式(Lazy Initialization):
优点:实现简单,只有在需要时才会创建实例。
缺点:在多线程环境下,存在线程安全问题。需要使用 synchronized 关键字保证线程安全,但会带来性能上的开销。
饿汉式(Eager Initialization):
优点:实现简单,线程安全,不存在多线程竞争的问题。
缺点:在程序启动时就创建实例,无论是否需要,可能会带来一定的资源浪费。
双重检查锁定(Double-Checked Locking):
优点:实现了懒加载和线程安全,同时避免了每次都需要获取锁的性能开销。
缺点:需要使用 volatile 关键字确保多线程环境下的可见性,实现稍微复杂。
静态内部类(Static Inner Class):
优点:实现了懒加载和线程安全,同时具有较高的性能和可读性。利用类加载机制保证了线程安全性。
缺点:无法在实例化时传递参数,适用于无需传参的场景。
枚举实现
优点:
线程安全:枚举实例在多线程环境下也是唯一的,不需要担心线程安全问题。
简洁明了:使用枚举实现单例非常简单,代码量少。
缺点:
无法延迟加载:枚举实例在类加载时就被实例化,无法实现延迟加载的特性。
无法传递参数:枚举实例无法在实例化时传递参数,适用于无需传参的场景。
使用场景:因此,使用枚举实现单例模式适合于简单的单例对象,且希望获得简洁的线程安全代码的情况。如果需要延迟加载或传递参数,其他实现方式可能更合适。
二、示列代码
懒汉式(Lazy Initialization)
public class LazySingleton {private static LazySingleton instance;private LazySingleton() {// 私有构造函数}public static synchronized LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}
}
饿汉式(Eager Initialization)
public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();private EagerSingleton() {// 私有构造函数}public static EagerSingleton getInstance() {return instance;}
}
双重检查锁定(Double-Checked Locking)
public class DoubleCheckedSingleton {private static volatile DoubleCheckedSingleton instance;private DoubleCheckedSingleton() {// 私有构造函数}public static DoubleCheckedSingleton getInstance() {if (instance == null) {synchronized (DoubleCheckedSingleton.class) {if (instance == null) {instance = new DoubleCheckedSingleton();}}}return instance;}
}
静态内部类(Static Inner Class)
public class StaticInnerSingleton {private StaticInnerSingleton() {// 私有构造函数}private static class SingletonHolder {private static final StaticInnerSingleton instance = new StaticInnerSingleton();}public static StaticInnerSingleton getInstance() {return SingletonHolder.instance;}
}
枚举实现
public enum EnumSingleton {INSTANCE;// 可以在枚举中添加其他成员变量和方法public void doSomething() {// 单例的操作逻辑}
}
三、适用场景
不同的单例实现方式适用于不同的场景。以下是对上述几种单例实现方式适用场景的简要总结:
懒汉式(Lazy Initialization):
适用场景:在需要延迟加载单例实例的情况下,且对线程安全性要求不是特别高的场景。单线程环境或者有额外的同步措施保证线程安全时可以考虑使用。
饿汉式(Eager Initialization):
适用场景:在程序启动时就需要创建单例实例,并且对线程安全性要求较高的场景。适合于单例对象较小且占用资源较少的情况。
双重检查锁定(Double-Checked Locking):
适用场景:在需要延迟加载单例实例的情况下,对线程安全性要求较高,并且希望在多线程环境下获取单例实例时具有较好的性能。适合于单例对象较大或者创建过程较为复杂的情况。
静态内部类(Static Inner Class):
适用场景:在需要延迟加载单例实例的情况下,对线程安全性要求较高,并且希望使用简洁、清晰的代码实现。适合于单例对象较小且占用资源较少的情况。
枚举实现:
适用场景:在需要简洁、线程安全的单例实现,并且不需要延迟加载和传递参数的情况下。适合于单例对象较小且占用资源较少的情况。
总结
需要根据具体的需求和场景来选择适合的单例实现方式。考虑到线程安全性、延迟加载、性能以及代码的简洁程度等因素,选择最合适的单例实现方式对于保证应用的正确性和性能是很重要的。
相关文章:

设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用…...

Android 13 - Media框架(25)- OMXNodeInstance(二)
上一节我们了解了 OMXNodeInstance 的创建过程,以及 IOmx 服务和 OMXNodeInstance、OMX组件之间的联系。接下来我们将一起了解 ACodec 是如何通过 OMXNodeInstance 这个中间层进行端口定义设置,以及端口Buffer分配的。 OMXNodeInstance 的代码还是比较长…...

生物系统学中的进化树构建和分析R工具包V.PhyloMaker2的介绍和详细使用
V.PhyloMaker2是一个R语言的工具包,专门用于构建和分析生物系统学中的进化树(也称为系统发育树或phylogenetic tree)。以下是对V.PhyloMaker2的一些基本介绍和使用说明: 论文介绍:V.PhyloMaker2: An updated and enla…...

XStream 反序列化漏洞 CVE-2021-39144 已亲自复现
XStream 反序列化漏洞 CVE-2021-39144 已亲自复现 漏洞名称漏洞描述影响版本 漏洞复现环境搭建 修复建议总结 漏洞名称 漏洞描述 在Unmarshalling Time处包含用于重新创建前一对象的类型信息。XStream基于这些类型的信息创建新实例。攻击者可以控制输入流并替换或注入对象&am…...

深入剖析LinkedList:揭秘底层原理
文章目录 一、 概述LinkedList1.1 LinkedList简介1.2 LinkedList的优点和缺点 二、 LinkedList数据结构分析2.1 Node节点结构体解析2.2 LinkedList实现了双向链表的原因2.3 LinkedList如何实现了链表的基本操作(增删改查)2.4 LinkedList的遍历方式 三、 …...

计算机网络复习-OSI TCP/IP 物理层
我膨胀了,挂我啊~ 作者简介: 每年都吐槽吉师网安奇怪的课程安排、全校正经学网络安全不超20人情景以及割韭菜企业合作的FW,今年是第一年。。 TCP/IP模型 先做两道题: TCP/IP协议模型由高层到低层分为哪几层: 这题…...

虚拟机服务器中了lockbit2.0/3.0勒索病毒怎么处理,数据恢复应对步骤
网络技术的不断发展也为网络威胁带来了安全隐患,近期,对于许多大型企业来说,许多企业的虚拟机服务器系统遭到了lockbit2.0/3.0勒索病毒攻击,导致企业所有计算机系统瘫痪,无法正常工作,严重影响了企业的正常…...

【MATLAB】 RGB和YCbCr互转
前言 在视频、图像处理领域经常会遇到不同色域图像的转换,比如RGB、YUV、YCbCr色域间的转换,这里提供一组转换公式,供大家参考。 色彩模型 RGB RGB色彩模型是一种用于表示数字图像的颜色空间,其中"RGB"代表红色&…...

【线性代数】决定张成空间的最少向量线性无关吗?
答1: 是的,张成空间的最少向量是线性无关的。 在数学中,张成空间(span space)是一个向量空间,它由一组向量通过线性组合(即每个向量乘以一个标量)生成。如果这组向量是线性无关的&…...

暴力破解(Pikachu)
基于表单的暴力破解 先随便输入一下,然后抓包,进行字典爆破 验证码绕过(on server) server服务端要输入正确的验证码后进行爆破 之后的操作没什么不一样 验证码绕过(on client) 这个也需要输入验证码,但是后面进行字典爆破的时候…...

如何使用CMake查看opencv封装好的函数
当我们有时想查看opencv自带的函数的源代码,比如函数cvCreateImage, 此时我们选中cvCreateImage, 点击鼠标右键->转到定义,我们会很惊讶的发现为什么只看到了cvCreateImage的一个简单声明,而没有源代码呢?这是因为openCV将很多…...

微盛·企微管家:用户运营API集成,电商无代码解决方案
连接电商平台的新纪元:微盛企微管家 随着电子商务的蓬勃发展,电商平台的高效运营已经成为企业成功的关键。在这个新纪元里,微盛企微管家以其创新的无代码开发连接方案,成为企业之间连接电商平台的强大工具。它允许企业轻松集成电…...

Hive 部署
一、介绍 Apache Hive是一个分布式、容错的数据仓库系统,支持大规模的分析。Hive Metastore(HMS)提供了一个中央元数据存储库,可以轻松地进行分析,以做出明智的数据驱动决策,因此它是许多数据湖架构的关键组…...

CopyOnWriteArrayList源码阅读
1、构造方法 无参构造函数 //创建一个空数组,赋值给array引用 public CopyOnWriteArrayList() {setArray(new Object[0]); }//仅通过getArray / setArray访问的数组。 private transient volatile Object[] array;//设置数组 final void setArray(Object[] a) {arra…...

Windows操作系统:共享文件夹,防火墙的设置
1.共享文件夹 1.1 共享文件夹的优点 1.2 共享文件夹的优缺点 1.3 实例操作 编辑 2.防火墙设置 2.1 8080端口设置 3.思维导图 1.共享文件夹 1.1 共享文件夹的优点 优点 协作和团队合作:共享文件夹使多个用户能够在同一文件夹中协作和编辑文件。这促进了团…...

STM32独立看门狗
时钟频率 40KHZ 看门狗简介 STM32F10xxx 内置两个看门狗,提供了更高的安全性、时间的精确性和使用的灵活性。两个看 门狗设备 ( 独立看门狗和窗口看门狗 ) 可用来检测和解决由软件错误引起的故障;当计数器达到给 定的超时值时,触发一个中…...

财务数据智能化:用AI工具高效制作财务分析PPT报告
Step1: 文章内容提取 WPS AI 直接打开文件,在AI对话框里输入下面指令: 假设你是财务总监,公司考虑与茅台进行业务合作、投资或收购,请整合下面茅台2021年和2022年的财务报告信息。整理有关茅台财务状况和潜在投资回报的信息&…...

vue3中使用three.js记录
记录一下three.js配合vitevue3的使用。 安装three.js 使用npm安装: npm install --save three开始使用 1.定义一个div <template><div ref"threeContainer" class"w-full h-full"></div> </template>可以给这个di…...

MySQL——表的内外连接
目录 一.内连接 二.外连接 1.左外连接 2.右外连接 一.内连接 表的连接分为内连和外连 内连接实际上就是利用where子句对两种表形成的笛卡儿积进行筛选,我们前面学习的查询都是内连接,也是在开发过程中使用的最多的连接查询。 语法: s…...

基于IPP-FFT的线性调频Z(Chirp-Z,CZT)的C++类库封装并导出为dll(固定接口支持更新)
上一篇分析了三种不同导出C++类方法的优缺点,同时也讲了如何基于IPP库将FFT函数封装为C++类库,并导出为支持更新的dll库供他人调用。 在此基础上,结合前面的CZT的原理及代码实现,可以很容易将CZT变换也封装为C++类库并导出为dll,关于CZT的原理和实现,如有问题请参考: …...

【C语言】指针
基本概念 在C语言中,指针是一种非常重要的数据类型,它用于存储变量的内存地址。指针提供了对内存中数据的直接访问,使得在C语言中可以进行灵活的内存操作和数据传递。以下是关于C语言指针的一些基本概念: 1. 指针的声明ÿ…...

PostgreSql 索引使用技巧
索引种类详情可参考《PostgreSql 索引》 一、适合创建索引的场景 经常与其他表进行连接的表,在连接字段上应该建索引。经常出现在 WHERE 子句中的字段,特别是大表的字段,应该建索引。经常出现在 ORDER BY 子句中的字段,应该建索…...

【华为数据之道学习笔记】6-7打造业务自助分析的关键能力
华为公司将自助分析作为一种公共能力,在企业层面进行了统一构建。一方面,面向不同的消费用户提供了差异性的能力和工具支撑;另一方面,引入了“租户”概念,不同类型的用户可以在一定范围内分析数据、共享数据结果。 1. …...

K8S从harbor中拉取镜像的规则imagePullPolicy
1、参数 配制参数为:imagePullPolicy: 可以选择的值有:Always,IfNotPresent,Never 2、参数结果 如果pod的镜像拉取策略为imagePullPolicy: Always:当harbor不能运行后,pod会一直从harbor上拉…...

LeetCode刷题--- 优美的排列
个人主页:元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客元清加油_【C】,【C语言】,【数据结构与算法】-CSDN博客 个人专栏 力扣递归算法题 http://t.csdnimg.cn/yUl2I 【C】 http://t.csdnimg.cn/6AbpV 数据结构与算法 http://t.cs…...

关于edge浏览器以及插件推荐【亲测好用】
一.edge浏览器介绍 Edge 浏览器是由微软公司开发的一款新一代网络浏览器。它最初于2015年发布,是微软Windows 10 操作系统的默认浏览器,后来还推出了适用于 Android 和 iOS 等移动设备的版本。Edge 浏览器采用了全新的浏览器内核,称为 Micros…...

关于“Python”的核心知识点整理大全43
目录 编辑 15.2.3 使2散点图并设置其样式 scatter_squares.py 15.2.4 使用 scatter()绘制一系列点 scatter_squares.py 15.2.5 自动计算数据 scatter_squares.py 15.2.6 删除数据点的轮廓 15.2.7 自定义颜色 15.2.8 使用颜色映射 scatter_squares.py 注意 15.2.9…...

Android Framework一些问题思考
一,zygote通信为什么用socket,而不是binder? 1,binder通信依赖用户空间进程Servicemanager,socket通信不依赖用户空间进程。zygote与servicemanager, surfaceflinger等都是通过各自init.rc文件被init进程解析加载,时…...

2024年安全员-C证证考试题库及安全员-C证试题解析
题库来源:安全生产模拟考试一点通公众号小程序 2024年安全员-C证证考试题库及安全员-C证试题解析是安全生产模拟考试一点通结合(安监局)特种作业人员操作证考试大纲和(质检局)特种设备作业人员上岗证考试大纲随机出的…...

推广主要指标及定义
推广主要指标以直通车为例解释,如图所示 1.展示量:当消费者搜索某个词,推广计划在天猫直通车展示位上被买家看到的次数(去掉被消费者快进划过、主图未完金展现等情况产生的曝光); 2.点击量:消费者看到广告…...