Java中的单例模式实践
发布时间: 2024-02-21 15:09:15 阅读量: 16 订阅数: 20 ![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
![](https://csdnimg.cn/release/wenkucmsfe/public/img/col_vip.0fdee7e1.png)
# 1. 单例模式概述
## 1.1 什么是单例模式?
在软件开发中,单例模式是一种常见的设计模式之一,它确保一个类只有一个实例,并提供一个全局访问点。通过单例模式,我们可以限制某个类只能生成一个实例对象,确保所有的代码共享这一实例。这对于一些需要频繁创建和销毁的对象来说,能够节省系统资源,提高性能。
## 1.2 单例模式的作用和优势
单例模式的作用主要在于确保一个类只有一个实例,并提供全局访问点。具体优势包括:
- 节省系统资源:单例模式避免了频繁地创建和销毁对象,从而节省了系统资源。
- 提高性能:由于单例模式只创建一个实例,可以提高系统性能。
- 全局访问点:单例模式可以被全局访问,方便了对实例的使用。
## 1.3 单例模式的应用场景
单例模式适用于以下场景:
- 数据库连接池
- 线程池
- 读取配置信息的类
- 日志记录器
- 操作系统中的文件系统
- Web应用中的计数器
- 资源管理器等
在接下来的章节中,我们将介绍单例模式的各种实现方式,以及在实际项目中的应用和扩展。
# 2. 单例模式的实现方式
单例模式在实际的Java开发中应用广泛,主要有以下几种实现方式:
### 2.1 懒汉式单例模式
懒汉式单例模式是在需要时才创建实例,代码如下:
```java
public class LazySingleton {
private static LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
instance = new LazySingleton();
}
return instance;
}
}
```
**代码说明**:懒汉式单例模式在第一次调用 `getInstance()` 方法时才创建实例,存在线程安全问题。
### 2.2 饿汉式单例模式
饿汉式单例模式是在类加载时就创建实例,代码如下:
```java
public class EagerSingleton {
private static EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
```
**代码说明**:饿汉式单例模式在类加载时就创建实例,不存在线程安全问题。
### 2.3 双重检查锁单例模式
双重检查锁单例模式通过双重检查锁机制来保证线程安全,代码如下:
```java
public class DoubleCheckSingleton {
private volatile static DoubleCheckSingleton instance;
private DoubleCheckSingleton() {}
public static DoubleCheckSingleton getInstance() {
if (instance == null) {
synchronized (DoubleCheckSingleton.class) {
if (instance == null) {
instance = new DoubleCheckSingleton();
}
}
}
return instance;
}
}
```
**代码说明**:双重检查锁单例模式在保证线程安全的同时,延迟加载实例。
### 2.4 静态内部类单例模式
静态内部类单例模式是利用类加载机制实现延迟加载,代码如下:
```java
public class InnerClassSingleton {
private InnerClassSingleton() {}
private static class SingletonHolder {
private static final InnerClassSingleton INSTANCE = new InnerClassSingleton();
}
public static InnerClassSingleton getInstance() {
return SingletonHolder.INSTANCE;
}
}
```
**代码说明**:静态内部类单例模式可以通过类加载机制实现延迟加载且线程安全。
### 2.5 枚举单例模式
枚举单例模式是Java中最简洁的实现方式,代码如下:
```java
public enum EnumSingle
```
0
0
相关推荐
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![pdf](https://img-home.csdnimg.cn/images/20210720083512.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![-](https://csdnimg.cn/download_wenku/file_type_column_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)