Java设计模式之单例模式

一、什么是单例模式

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

二、单例模式特点

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

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

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

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

三、线程安全问题

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

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

四、单例模式的优点

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

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

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

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

• 工具类对象;

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

相关推荐
XS03010612 小时前
Java基础笔记(一)
java·笔记·python
程序员老邢12 小时前
【产品底稿 05】商助慧 V1.1 里程碑:RAG 文章仿写模块全链路实现
java·spring boot·程序人生·ai·milvus
IT 行者12 小时前
软件设计模式会不会是制约大模型编程的障碍?
设计模式·ai编程
消失的旧时光-194313 小时前
Spring Boot 实战(三):Service 分层 + 统一返回 + 异常处理(工程级写法)
java·spring boot·接口·解耦
云烟成雨TD13 小时前
Spring AI Alibaba 1.x 系列【20】MessagesAgentHook 、MessagesModelHook 相关实现类
java·人工智能·spring
霸道流氓气质13 小时前
SpringBoot中集成LangChain4j实现集成阿里百炼平台进行AI对话记忆功能和对话隔离功能
java·人工智能·spring boot·langchain4j
XS03010613 小时前
Java 基础笔记(二)
java·笔记·python
papaofdoudou13 小时前
AMD-V 嵌套分页白皮书翻译
java·linux·服务器
海寻山13 小时前
Java 泛型 (Generic) 入门到精通:语法 + 原理 + 实战 + 避坑
java·windows·python
艾莉丝努力练剑13 小时前
【Linux线程】Linux系统多线程(七):<线程同步与互斥>线程同步(下)
java·linux·运维·服务器·c++·学习·操作系统