Java设计模式之单例模式

一、什么是单例模式

确保某个类只有一个实例,而且自行实例化并向整个系统提供这个实例。

二、单例模式特点

1、单例类只能有一个实例。

 2、单例类必须自己创建自己的唯一实例。

 3、单例类必须给所有其他对象提供这一实例。

单例模式保证了全局对象的唯一性,比如系统启动读取配置文件就需要单例保证配置的一致性。

三、线程安全问题

一方面在获取单例的时候,要保证不能产生多个实例对象;

另一方面,在使用单例对象的时候,要注意单例对象内的实例变量是会被多线程共享的,推荐使用无状态的对象,不会因为多个线程的交替调度而破坏自身状态导致线程安全问题,比如我们常用的VO,DTO等(局部变量是在用户栈中的,而且用户栈本身就是线程私有的内存区域,所以不存在线程安全问题)。

四、单例模式的优点

系统内存中该类只存在一个对象,节省了系统资源,对于一些需要频繁创建销毁的对象,使用单例模式可以提高系统性能。
五、单例模式的缺点

当想实例化一个单例类的时候,必须要记住使用相应的获取对象的方法,而不是使用new,可能会给其他开发人员造成困扰,特别是看不到源码的时候。
六、单例模式的使用场景

• 需要频繁的进行创建和销毁的对象;

• 创建对象时耗时过多或耗费资源过多,但又经常用到的对象;

• 工具类对象;

• 频繁访问数据库或文件的对象。

相关推荐
_Aaron___28 分钟前
Spring AI 接入 MCP:工具调用不是“能调就行”,关键是边界治理
java·人工智能·spring
向量引擎43 分钟前
从零起步,如何打造专属向量引擎 API 中转工作流?
java·服务器·前端
LJianK143 分钟前
普通接口,用到getter和setter方法的地方,jackson转换
java
辰海Coding1 小时前
MiniSpring框架学习-分解 Dispatcher
java·学习·spring·架构
AI人工智能+电脑小能手1 小时前
【大白话说Java面试题 第84题】【Mysql篇】第14题:为什么用 InnoDB 存储引擎的表建议用整型的自增主键?
java·开发语言·数据库·mysql·面试
小江的记录本1 小时前
【JVM虚拟机】JVM调优:常用JVM参数、调优核心指标、OOM排查、GC日志分析、Arthas工具使用(附《思维导图》+《面试高频考点清单》)
java·jvm·spring boot·后端·python·spring·面试
金銀銅鐵1 小时前
[Java] 用图形化界面演示 iadd, isub, iconst_<i> 指令的效果
java·后端·python
J2虾虾1 小时前
Spring AI Alibaba文档
java·人工智能·spring
YikNjy2 小时前
break和continue
java·开发语言·算法
SomeOtherTime2 小时前
Geojson相关(AI回答)
java·前端·python