一、创建型(单例模式)
单例模式
概念
单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。它控制类的实例化过程,防止外部代码创建新的实例。
应用场景
- 日志记录:确保只有一个日志记录器,以便于管理和避免重复记录。
- 配置管理:用于读取和存储配置信息,确保全局只有一个配置对象。
- 线程池:管理线程池,确保其只有一个实例,便于资源管理。
- 数据库连接:通过单例模式管理数据库连接,避免频繁创建和销毁连接。
- 缓存管理:使用单例管理缓存,以确保数据一致性和减少内存使用。
- UI管理:在图形用户界面中,某些组件如主窗口可能需要确保只有一个实例。
注意点
- 线程安全:如果在多线程环境中使用,需要确保线程安全,避免出现多个实例。
- 序列化问题:反序列化时,可能会创建新的实例,需实现
readResolve方法防止此问题。 - 懒加载:如果实例的创建开销较大,可以使用懒加载方式,但需处理好同步问题。
核心要素
- 私有构造函数:防止外部实例化。
- 静态变量:持有唯一实例。
- 静态方法:提供访问实例的全局方法。
- 线程安全:确保在多线程环境下安全使用。
Java代码示例
public class Singleton {// 懒汉式:延迟加载,线程安全private static volatile Singleton instance;private Singleton() {// 私有构造函数}public static Singleton getInstance() {if (instance == null) {synchronized (Singleton.class) {if (instance == null) {instance = new Singleton();}}}return instance;}
}
各种变形用法
-
饿汉式
在类加载时就创建实例,适合实例化开销不大且始终需要使用的场景。public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();private EagerSingleton() {}public static EagerSingleton getInstance() {return instance;} } -
静态内部类
利用静态内部类实现懒加载,同时线程安全。public class StaticInnerClassSingleton {private StaticInnerClassSingleton() {}private static class Holder {private static final StaticInnerClassSingleton INSTANCE = new StaticInnerClassSingleton();}public static StaticInnerClassSingleton getInstance() {return Holder.INSTANCE;} } -
枚举方式
Java中推荐的单例实现方式,天然支持序列化。public enum EnumSingleton {INSTANCE;// 其他方法 } -
双重检查锁定
提高性能,减少同步开销。public class DoubleCheckedLockingSingleton {private static volatile DoubleCheckedLockingSingleton instance;private DoubleCheckedLockingSingleton() {}public static DoubleCheckedLockingSingleton getInstance() {if (instance == null) {synchronized (DoubleCheckedLockingSingleton.class) {if (instance == null) {instance = new DoubleCheckedLockingSingleton();}}}return instance;} }
这些是单例模式的基本知识和变形用法
相关文章:
一、创建型(单例模式)
单例模式 概念 单例模式是一种创建型设计模式,确保一个类只有一个实例,并提供一个全局访问点。它控制类的实例化过程,防止外部代码创建新的实例。 应用场景 日志记录:确保只有一个日志记录器,以便于管理和避免重复记…...
毕业设计项目-古典舞在线交流平台的设计与实现(源码/论文)
项目简介 基于springboot实现的,主要功能如下: 技术栈 后端框框:springboot/mybatis 前端框架:html/JavaScript/Css/vue/elementui 运行环境:JDK1.8/MySQL5.7/idea(可选)/Maven3(…...
【秋招笔试】10.09华子秋招(已改编)-三语言题解
🍭 大家好这里是 春秋招笔试突围,一起备战大厂笔试 💻 ACM金牌团队🏅️ | 多次AK大厂笔试 | 大厂实习经历 ✨ 本系列打算持续跟新 春秋招笔试题 👏 感谢大家的订阅➕ 和 喜欢💗 和 手里的小花花🌸 ✨ 笔试合集传送们 -> 🧷春秋招笔试合集 本次的三题全部上线…...
【算法笔记】双指针算法深度剖析
【算法笔记】双指针算法深度剖析 🔥个人主页:大白的编程日记 🔥专栏:算法笔记 文章目录 【算法笔记】双指针算法深度剖析前言一.移动零1.1题目1.2思路分析1.3代码实现 二.复写零2.1题目2.2思路分析2.3代码实现 三.快乐数3.1题目…...
第二十二天|回溯算法| 理论基础,77. 组合(剪枝),216. 组合总和III,17. 电话号码的字母组合
目录 回溯算法理论基础 1.题目分类 2.理论基础 3.回溯法模板 补充一个JAVA基础知识 什么时候用ArrayList什么时候用LinkedList 77. 组合 未剪枝优化 剪枝优化 216. 组合总和III 17. 电话号码的字母组合 回溯法的一个重点理解:细细理解这句话!…...
关闭IDM自动更新
关闭IDM自动更新 1 打开注册表2 找到IDM注册表路径 1 打开注册表 winR regedit 2 找到IDM注册表路径 计算机\HKEY_CURRENT_USER\Software\DownloadManager 双击LstCheck,把数值数据改为0 完成 感谢阅读...
Go 性能剖析工具 pprof 与 Graphviz 教程
在 Golang 开发中,性能分析是确保应用高效运行的重要环节。本文介绍如何使用 gin-contrib/pprof 在 Gin 应用中集成性能剖析工具,并结合 Graphviz 生成图形化的性能分析结果,如火焰图。这套流程帮助开发者更好地理解和优化 Go 应用的性能。 目…...
【题目解析】蓝桥杯23国赛C++中高级组 - 斗鱼养殖场
【题目解析】蓝桥杯23国赛C中高级组 - 斗鱼养殖场 题目链接跳转:点击跳转 前置知识: 了解过基本的动态规划。熟练掌握二进制的位运算。 题解思路 这是一道典型的状压动态规划问题。设 d p i , j dp_{i, j} dpi,j 表示遍历到第 i i i 行的时候&a…...
JavaScript可视化:探索顶尖的图表库
JavaScript可视化:探索顶尖的图表库 在这个被数据驱动的时代,你有没有想过,数据本身是如何变得有意义的?答案就是数据可视化。通过图表和图形,我们不仅可以看到数据,还可以感受到它,从而做出明…...
谷歌AI大模型Gemini API快速入门及LangChain调用视频教程
1. 谷歌Gemini API KEY获取及AI Studio使用 要使用谷歌Gemini API,首先需要获取API密钥。以下是获取API密钥的步骤: 访问Google AI Studio: 打开浏览器,访问Google AI Studio。使用Google账号登录,若没有账号…...
进入容器:掌控Docker的世界
进入容器:掌控Docker的世界 在这个快速发展的技术时代,你是否曾被Docker的庞大生态所吸引?那么,有没有想过在这个容器化的世界里,如何快速高效地“进入”这些隐藏在虚拟墙后的容器呢?容器就如同魔法箱,装载着应用与服务,而你,通过探索这些容器,能够更好地管理、排除…...
初始Linux(二)基础命令
前言: 之前那一篇我们已经介绍了一部分的基础命令,当然那只不过是九牛一毛,本篇我们继续介绍一些比较重要且需要掌握的基础命令。 mv命令: 其实这个命令有两个功能,一个是移动(剪切)文件&#…...
STM32 OLED
文章目录 前言一、OLED是什么?二、使用步骤1.复制 OLED.C .H文件1.1 遇到问题 2.统一风格3.主函数引用头文件3.1 oled.h 提供了什么函数 4.介绍显示一个字符的函数5. 显示十进制函数的讲解 三、使用注意事项3.1 配置符合自己的引脚3.2 花屏总结 前言 提示ÿ…...
伦敦金实时行情决策辅助!
在伦敦金实时交易的过程中,投资者主要依赖技术分析来辅助自己的投资决策。与基本面分析不同,技术分析侧重于研究金价的走势和市场行为,通过图表和技术指标来预测未来的市场走势。常用的技术分析方法包括: 趋势线和支撑阻力位&…...
Leetcode 746. 使用最小花费爬楼梯 入门dp C++实现
问题:Leetcode 746. 使用最小花费爬楼梯 给你一个整数数组 cost ,其中 cost[i] 是从楼梯第 i 个台阶向上爬需要支付的费用。一旦你支付此费用,即可选择向上爬一个或者两个台阶。 你可以选择从下标为 0 或下标为 1 的台阶开始爬楼梯。 请你…...
路由协议常见知识点
路由协议是网络通信的基础,主要负责在网络中传递数据包,并确保它们从源节点传递到目标节点。本文将介绍一些常见的路由协议知识点,包括路由协议的分类、特性、配置与管理以及常见问题。 一、路由协议的分类 距离矢量路由协议: R…...
多模态大语言模型(MLLM)-InstructBlip深度解读
前言 InstructBlip可以理解为Blip2的升级版,重点加强了图文对话的能力。 模型结构和Blip2没差别,主要在数据集收集、数据集配比、指令微调等方面下文章。 创新点 数据集收集: 将26个公开数据集转换为指令微调格式,并将它们归类…...
网页前端开发之Javascript入门篇(7/9):字符串
Javascript字符串 什么是字符串? 答:其概念跟 Python教程 介绍的一样,只是语法上有所变化。 在 Javascript 中,一个字符串变量可以看做是其内置类String的一个实例(Javascript会自动包装)。 因此它拥有一…...
双登股份再战IPO:数据打架,实控人杨善基千万元股权激励儿子
撰稿|行星 来源|贝多财经 近日,双登集团股份有限公司(下称“双登股份”)递交招股书,准备在港交所主板上市,中金公司、建银国际、华泰国际为其联席保荐人。 贝多财经了解到,这并非双登股份首次向资本市场…...
4.Python 函数(函数的定义、函数的传入参数、函数的返回值、None 类型、函数说明文档、变量的作用域)
一、函数快速入门 1、函数概述 函数是组织好的,可重复使用的,用来实现特定功能的代码段 name "Hello World" name_length len(name)print(f"{name} 的长度为 {name_length}") # Hello World 的长度为 11len() 是Python 内置的函…...
Pixel Epic · Wisdom Terminal保姆级教程:备份与恢复研报工程文件全指南
Pixel Epic Wisdom Terminal保姆级教程:备份与恢复研报工程文件全指南 1. 引言:为什么需要备份研报工程文件 在Pixel Epic Wisdom Terminal中,每一份研究报告都是你与AI贤者共同创造的智慧结晶。就像RPG游戏中的存档点一样,定…...
VisDrone2019-MOT转COCO踩坑实录:为什么你的转换脚本总报错?附修复方案
VisDrone2019-MOT转COCO实战避坑指南:从报错解析到工业级解决方案 当你第一次尝试将VisDrone2019-MOT数据集转换为COCO格式时,可能会遇到各种令人抓狂的报错信息。这不是你的问题——这个转换过程确实存在许多隐藏的陷阱。本文将带你深入剖析五个最常见的…...
华为交换机等保2.0实战:手把手配置身份鉴别,从密码策略到登录超时
华为交换机等保2.0身份鉴别全流程配置指南 当企业网络面临等保2.0合规检查时,身份鉴别环节往往是整改重点。作为网络安全工程师,我曾协助多家企业通过等保测评,发现华为交换机的身份鉴别配置存在不少易忽略的细节。本文将分享一套经过实战验证…...
GLM-OCR部署避坑:CPU模式也能用,无显卡用户详细指南
GLM-OCR部署避坑:CPU模式也能用,无显卡用户详细指南 你是不是也遇到过这种情况:看到别人用AI模型轻松识别文档、提取表格,自己也想试试,结果一查部署要求——“需要NVIDIA显卡,显存8GB以上”。手头只有一台…...
提示工程代码审查避坑指南:10个容易犯的低级错误
提示工程代码审查避坑指南:10个容易犯的低级错误 引言:为什么提示工程需要“代码审查”? 在AI时代,提示词(Prompt)是人类与大语言模型(LLM)沟通的“桥梁”。就像程序员写代码需要评审…...
seo公司招聘的实习机会有哪些
SEO公司招聘的实习机会有哪些? 在当今数字化时代,SEO(搜索引擎优化)已经成为企业在网络上获得高流量和高曝光度的关键手段。随着越来越多的企业意识到SEO的重要性,SEO公司也在不断扩展,吸引大量优秀的实习…...
nlp_structbert_sentence-similarity_chinese-large入门指南:从ModelScope下载到本地Web服务上线
nlp_structbert_sentence-similarity_chinese-large入门指南:从ModelScope下载到本地Web服务上线 你是不是经常需要判断两句话是不是一个意思?比如,检查用户提问是不是同一个问题,或者看看两段文案是不是在说同一件事。以前做这种…...
2025年SQL2API平台深度评测:QuickAPI、dbapi与Magic API的实战应用指南
1. 2025年SQL2API平台的核心价值与应用场景 在数据爆炸的时代,企业每天产生的数据量呈指数级增长。我曾参与过一个零售企业的数据中台项目,他们的商品数据分散在5个不同系统的数据库中,光是整理基础数据接口就耗费了团队两周时间。直到我们引…...
基于Ascend 950的Cube编程
直播回放链接:基于下一代硬件的Cube编程_哔哩哔哩_bilibili...
Mathtype公式识别:Magma多模态AI在教育领域的应用
Mathtype公式识别:Magma多模态AI在教育领域的应用 1. 引言 作为一名长期关注AI技术发展的从业者,我最近在测试微软开源的Magma多模态模型时,发现了一个特别有意思的应用场景——数学公式识别与处理。想象一下这样的场景:老师批改…...
