设计模式—2—单例模式

文章目录

    • 一、单例模式概述
    • 二、单例模式特点
    • 三、示例
      • 3.1、基本实现(懒汉式-线程不安全)
      • 3.2、基本实现(懒汉式-线程安全)
      • 3.3、基本实现(饿汉式)
    • 四、总结

一、单例模式概述

单例模式(Singleton Pattern)是一种常用的软件设计模式,它的主要目的是确保一个类只有一个实例,并提供一个全局访问点来访问这个实例。这种模式可以避免多个实例的产生,有助于节省系统资源,并保证在整个应用中该类的方法和状态的一致性。

二、单例模式特点

  • 私有构造函数:为了防止其他对象实例化该类,单例类的构造函数通常被声明为私有的。
  • 静态内部实例:单例类内部包含一个静态的成员变量,用于存储唯一实例。
  • 公共获取方法:单例类提供一个静态方法来安全地返回实例。这个方法通常会处理线程安全延迟初始化等问题。
  • 线程安全性:在多线程环境下,需要确保单例模式是线程安全的,即无论多少线程同时访问,都只能创建一个实例。
  • 延时初始化:就是这个单例对象什么时候被初始化,提前初始化(饿汉式),第一次被调用时初始化(懒汉式)。

三、示例

3.1、基本实现(懒汉式-线程不安全)

public class Singleton {private static Singleton instance;// 私有构造函数private Singleton() {}// 公共静态方法,线程不安全public static Singleton getInstance() {if (instance == null) {instance = new Singleton();}return instance;}
}

3.2、基本实现(懒汉式-线程安全)

public class Singleton {private volatile static Singleton instance;private Singleton() {}// 双重检查锁定public static Singleton getInstance() {// 第一次:判空if (instance == null) {// 第二次:创建时加锁,保证线程安全synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}

3.3、基本实现(饿汉式)

public class Singleton {// 构建的时候就初始化private static Singleton instance = new Singleton();private Singleton() {}public static Singleton getInstance() {return instance;}
}

四、总结

单例模式在实际开发中非常常见,尤其是在管理配置文件、日志对象、数据库连接等方面。不过需要注意的是,单例模式也有其局限性,比如过度使用会导致代码变得难以测试和维护。因此,在使用时需要权衡利弊。

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

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

相关文章

深度学习(二)-损失函数+梯度下降

损失函数 损失函数(Loss Function),也有称之为代价函数(Cost Function),用来度量预测值和实际值之间的差异。 损失函数的作用 度量决策函数f(x)和实际值之间的差异。 作为模型性能…

检测CSRF漏洞的工具

免责声明此文档仅限于学习讨论与技术知识的分享,不得违反当地国家的法律法规。对于传播、利用文章中提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,本文作者不为此承担任何责任,一旦造成后果请自行承担&…

二百五十九、Java——采集Kafka数据,解析成一条条数据,写入另一Kafka中(一般JSON)

一、目的 由于部分数据类型频率为1s,从而数据规模特别大,因此完整的JSON放在Hive中解析起来,尤其是在单机环境下,效率特别慢,无法满足业务需求。 而Flume的拦截器并不能很好的转换数据,因为只能采用Java方…

javascript数据结构与算法-- 二叉树

javascript数据结构与算法-- 二叉树 树是计算机科学中经常用到的一种数据结构。树是一种非线性的数据结构,以分成的方式存储数据,树被用来存储具有层级关系的数据,比如文件系统的文件,树还被用来存储有序列表。我们要研究的是二叉…

IObit Uninstaller Pro v13.6.0.5 绿色便携免安装版本 下载

功能非常强大好用的软件卸载清理工具 下载地址(资源制作整理不易,下载使用需付费,不能接受请勿浪费时间下载) 链接:https://pan.baidu.com/s/1I7lbixooii9ezSrp3X-y-w?pwd716l 提取码:716l

d3dcompiler_47.dll缺失的可能原因多种多样,那么d3dcompiler_47.dll缺失怎么修复

在数字世界的深处,d3dcompiler_47.dll文件扮演着至关重要的角色,它是Direct3D编译器的一部分,负责处理图形渲染和游戏运行中的关键任务。然而,当用户启动某个程序或游戏时,屏幕上突然弹出的错误提示“d3dcompiler_47.d…

苹果手机勿扰模式怎么关闭?4个方法快速关闭!

我们为了提升做事的效率以及保障休息的质量,在认真工作和学习,或者是晚上休息的时候,通常会打开苹果手机的勿扰模式。但当我们需要恢复苹果手机的消息通知时,苹果手机勿扰模式怎么关闭呢?今天,小编整理了4个…

机械学习—零基础学习日志(概率论总笔记2)

正态分布 高斯分布也叫做正态分布。假定事件A经过n次试验后发生了k次,把k的概率分布图画一下,就得到了一个中间鼓起,像倒扣的钟一样的对称图形。 18世纪,数学家棣莫弗和拉普拉斯把这种中间大,两头小的分布称为正态分布…

厨师帽佩戴识别摄像机

厨师帽佩戴识别摄像机 是一种用于识别厨师是否佩戴帽子的智能设备,其作用在于强制执行食品安全卫生标准,防止头发掉落入食物中。该摄像机利用人工智能和图像识别技术,能够识别厨师是否佩戴厨师帽。当摄像机检测到厨师未佩戴帽子时&#xff0c…

微信小程序中Towxml解析Markdown及html

一、Towxml Towxml 是一个让小程序可以解析Markdown、HTML的解析库。 二、引入 2.1 clone代码 git clone https://github.com/sbfkcel/towxml.git2.2 安装依赖 npm install2.3 打包 npm run build2.4 引入文件 将dist文件复制到微信小程序根目录,改名为towx…

THE UNIVERSITY OF MANCHESTER-NUMERICAL ANALYSIS 2Final Exam2021

2. (a) Briey describe how orthogonal polynomials can be used to fi nd the nodes of Gaussian quadra-ture rules for a weighted integral ∫ a b f ( x ) w ( x ) d x . \int_{a}^bf(x)w(x)\mathrm{d}x. ∫ab​f(x)w(x)dx.(b) Using your described approach to find th…

《全球及中国时域反射计(TDR)行业市场现状分析与发展前景预测研究报告》

报告导读:本报告从国际时域反射计(TDR)发展、国内时域反射计(TDR)政策环境及发展、研发动态、供需情况、重点生产企业、存在的问题及对策等多方面多角度阐述了时域反射计(TDR)市场的发展&#x…

Flutter中的Key

在Flutter 中,Key 是 几乎所有 widget 都具有的属性。为什么 widget 具有 Key 呢?Key的作用是什么? 什么是 Key Key是Widget、Element 和 SemanticNodes 的标识符。 Key 是Widget、Element 和 SemanticNodes的唯一标识。例如对于 Widget 在 …

数据结构之 “单链表“

(1)在顺表表中,如果是头插/删的时间复杂度是O(1);尾插/删的时间复杂度是O(N) (2)增容一般是呈2倍的增长,势必会有一定的空间浪费。比如:申请了50个空间,只用了两个&#…

Type-C接口诱骗取电快充方案

Type-C XSP08Q 快充协议芯片是一种新型电源管理芯片,主要负责控制充电电流和电压等相关参数,从而实现快速充电功能。Type-C XSP08Q快充协议是在Type-C接口基础上,加入了XSP08Q协议芯片的支持,很大程度上提升了充电速度。 正常情况…

CUDA编程08 - 并行编程思维

一:概述 到目前为止,我们集中于学习并行编程的实用知识,包括CUDA编程接口特性、GPU架构、性能优化技术、并行模式和应用案例研究。在本章中,我们将讨论更为抽象的概念。我们将并行编程概括为一种思维过程,即设计或选择并行算法,并将一个实际问题分解基本的工作单元,这些…

C#泛型相关

什么是泛型? 泛型是C#2.0版本和公共语言运行库 (CLR) 中的一个非常重要的新功能。泛型就是类型参数化,用于处理的数据类型不固定的情况下,将类型作为参数传入。 使用泛型的好处? 代码复用:我们一套代码可以支持不同…

Linux——性能调优工具一览

一、CPU 1.调优工具 根据指标找工具 性能指标工具说明 平均负载 uptime、top uptime最简单、top提供了更全的指标 系统整体CPU使用率 vmstat、mpstat、top、sar、/proc/stat top、vmstat、mpstat只可以动态查看,而sar还可以记录历史数据 /proc/stat是其他性…

UE引擎内置插件信息 储存的位置

.uproject。图标文件可以让UE 引擎内置插件,配置更改,比如我希望我的DataSmithImporter插件是启用的。

STM32 ADC采样详解

Content 0x00 前言0x01 ADC配置0x02 滤波处理 0x00 前言 在单片机开发过程中,常常涉及到ADC的使用,市面上大部分便宜的传感器都是采用的ADC来获取其数据,如MQ-2 烟雾传感器、光敏传感器等等。 此类传感器工作原理为根据所采集到的数据变化…