当前位置: 首页 > news >正文

单例模式深度解析:从原理到高阶应用实践

在这里插入图片描述

第一章:单例模式基础理论

1.1 设计模式概述

设计模式是软件工程中解决常见问题的经典方案,是前辈开发者经验的结晶。1994年由GoF提出的23种设计模式分为三大类:

  • 创建型模式(5种)
  • 结构型模式(7种)
  • 行为型模式(11种)

单例模式(Singleton Pattern)作为创建型模式中最基础也是最常被讨论的模式,其核心价值在于确保全局唯一性和受控访问。

1.2 单例模式定义

官方定义:保证一个类仅有一个实例,并提供一个访问它的全局访问点。

核心要素

  1. 私有静态实例变量
  2. 私有构造方法
  3. 公共静态访问方法
  4. (可选)线程安全措施
  5. (可选)防反射/序列化攻击机制

UML类图

+------------------+
|   Singleton      |
+------------------+
| - instance: Singleton |
+------------------+
| - Singleton()    |
| + getInstance(): Singleton |
+------------------+

1.3 应用场景分析

适合场景包括:

  • 配置信息管理器
  • 数据库连接池
  • 日志记录器
  • 硬件接口访问
  • 应用级缓存系统
  • 线程池管理
  • 状态管理服务

典型特征:

  • 需要严格控制资源访问
  • 频繁创建销毁成本高
  • 需要全局状态协调
  • 共享资源配置管理

第二章:经典实现方式剖析

2.1 饿汉式(Eager Initialization)

public class EagerSingleton {private static final EagerSingleton instance = new EagerSingleton();private EagerSingleton() {// 防止反射攻击if (instance != null) {throw new RuntimeException("Use getInstance() method to get the single instance.");}}public static EagerSingleton getInstance() {return instance;}
}

特点

  • 类加载时立即初始化
  • 线程安全由JVM类加载机制保证
  • 无法延迟加载
  • 可能造成资源浪费

类加载时机

  1. new关键字实例化
  2. 反射调用
  3. 子类被初始化
  4. 主类被指定为程序入口

2.2 懒汉式(Lazy Initialization)

基础版:

public class LazySingleton {private static LazySingleton instance;private LazySingleton() {}public static synchronized LazySingleton getInstance() {if (instance == null) {instance = new LazySingleton();}return instance;}
}

优化方向

  • 减少同步锁粒度
  • 使用双重检查锁定
  • 避免指令重排序

2.3 双重检查锁(Double-Checked Locking)

public class DCLSingleton 

相关文章:

  • 文章记单词 | 第89篇(六级)
  • jvm第一篇《内存与垃圾回收》学习笔记第一章jvm初始
  • 计算机图形学编程(使用OpenGL和C++)(第2版)学习笔记 10.增强表面细节(二)法线贴图
  • [MySQL排查] “Too many connections“ 错误?数据库最大连接数满了怎么办及优化
  • 我的 PDF 工具箱:CodeBuddy 打造 PDFMagician 的全过程记录
  • Jenkins教程
  • C#将1GB大图裁剪为8张图片
  • Ngrok 配置:实现 Uniapp 前后端项目内网穿透
  • vue使用Fabric和pdfjs完成合同签章及批注
  • 解决LeetCode 47. 全排列 II 问题的正确姿势:深入分析剪枝与状态跟踪
  • MySQL的 JOIN 优化终极指南
  • ES(Elasticsearch)的应用与代码示例
  • 股指期货贴水为何会产生成本?
  • WebSocket聊天室的简单制作指南
  • qt文本边框设置
  • 保安员考试报名时,体检项目包含哪些?
  • Spyglass:跨时钟域同步(同步使能)
  • Day 22 训练
  • 软件开发中常见(合规)工具
  • tomcat一闪而过,按任意键继续以及控制台中文乱码问题
  • “16+8”“生酮饮食”,网红减肥法究竟靠谱吗?
  • 政企共同发力:多地密集部署外贸企业抢抓90天政策窗口期
  • 埃尔多安:愿在土耳其促成俄乌领导人会晤
  • 辽宁盘山县一乡镇幼儿园四名老师被指多次殴打一女童,均被行拘
  • 《上海市建筑信息模型技术应用指南(2025版)》发布
  • 视频丨中国海警成功救助8名外籍遇险渔民,韩方向中方致谢