Java中的单例模式实现方式详解
173 浏览量
更新于2024-08-29
收藏 84KB PDF 举报
"本文主要介绍了GOF23设计模式中的单例模式,其核心作用是保证类只有一个实例并提供全局访问点。单例模式适用于任务管理器、回收站、网站计数器和数据库连接池等场景。单例模式的优点包括减少系统性能开销和优化资源访问。文章列举了五种常见的单例模式实现方式:饿汉式、懒汉式、双重检查锁式、静态内部类和枚举单例,并分别进行了分析。"
单例模式是一种常用的软件设计模式,它确保一个类只有一个实例,并提供一个全局访问点。这种模式在Java中常常用于创建工具类或者管理需要消耗大量资源的对象。例如,当创建一个对象需要读取配置文件或依赖其他对象时,通过单例模式可以在应用程序启动时就创建对象,从而避免频繁创建和销毁对象带来的性能损失。
单例模式的应用场景包括:
1. 任务管理器:需要一个全局的任务调度中心来管理所有任务。
2. 回收站:操作系统中用于统一处理删除文件的地方。
3. 网站计数器:统计网站访问量,只有一个实例可以保证计数的准确性。
4. 数据库连接池:管理数据库连接,避免频繁建立和关闭连接,提高系统效率。
单例模式的优点:
1. 资源效率:只有一个实例,降低了内存占用,尤其是在对象创建成本高的情况下。
2. 全局访问:提供一个全局访问点,使得任何地方都可以方便地获取到这个唯一实例。
常见的单例模式实现方式包括:
1. 饿汉式:在类加载时即创建单例对象,线程安全,但可能导致资源的提前占用。
```java
public class SingletonDemo01 {
private static SingletonDemo01 instance = new SingletonDemo01();
private SingletonDemo01() {}
public static SingletonDemo01 getInstance() { return instance; }
}
```
2. 懒汉式:延迟到第一次调用时才创建对象,线程不安全,但在多线程环境下需要添加同步控制。
```java
public class SingletonDemo02 {
private static SingletonDemo02 instance;
private SingletonDemo02() {}
public static synchronized SingletonDemo02 getInstance() {
if (instance == null) {
instance = new SingletonDemo02();
}
return instance;
}
}
```
3. 双重检查锁式(DCL):在多线程环境中更安全,但可能存在JVM内存模型问题,可以通过volatile关键字优化。
4. 静态内部类:线程安全,延迟加载,利用类加载机制保证单例。
5. 枚举单例:线程安全,无需额外同步,且防止反序列化重新创建实例。
每种实现方式都有其适用场景,选择哪种方式应根据项目需求和性能考虑。例如,如果希望尽早初始化单例以节省后续的创建时间,可以采用饿汉式;如果希望在首次使用时才创建单例,可以使用懒汉式或静态内部类。同时,为了保证线程安全,需要根据具体实现选择适当的同步机制,如synchronized关键字或枚举的天然线程安全性。
2020-06-10 上传
2020-09-04 上传
2021-01-04 上传
2018-05-21 上传
2009-12-03 上传
2011-03-09 上传
2007-10-25 上传
weixin_38531210
- 粉丝: 2
- 资源: 917
最新资源
- 新代数控API接口实现CNC数据采集技术解析
- Java版Window任务管理器的设计与实现
- 响应式网页模板及前端源码合集:HTML、CSS、JS与H5
- 可爱贪吃蛇动画特效的Canvas实现教程
- 微信小程序婚礼邀请函教程
- SOCR UCLA WebGis修改:整合世界银行数据
- BUPT计网课程设计:实现具有中继转发功能的DNS服务器
- C# Winform记事本工具开发教程与功能介绍
- 移动端自适应H5网页模板与前端源码包
- Logadm日志管理工具:创建与删除日志条目的详细指南
- 双日记微信小程序开源项目-百度地图集成
- ThreeJS天空盒素材集锦 35+ 优质效果
- 百度地图Java源码深度解析:GoogleDapper中文翻译与应用
- Linux系统调查工具:BashScripts脚本集合
- Kubernetes v1.20 完整二进制安装指南与脚本
- 百度地图开发java源码-KSYMediaPlayerKit_Android库更新与使用说明