[Java]如何实现单例模式
### Java如何实现单例模式
#### 饿汉式单例
```java
public class EagerSingleton {
private static final EagerSingleton instance = new EagerSingleton();
private EagerSingleton() {}
public static EagerSingleton getInstance() {
return instance;
}
}
```
#### 懒汉式单例(线程安全)
```java
public class LazySingleton {
private static volatile LazySingleton instance;
private LazySingleton() {}
public static LazySingleton getInstance() {
if (instance == null) {
synchronized (LazySingleton.class) {
if (instance == null) {
instance = new LazySingleton();
}
}
}
return instance;
}
}
```
#### 静态内部类实现
```java
public class InnerClassSingleton {
private InnerClassSingleton() {}
private static class SingletonHolder {
private static final InnerClassSingleton instance = new InnerClassSingleton();
}
public static InnerClassSingleton getInstance() {
return SingletonHolder.instance;
}
}
```
#### 枚举实现(推荐方式)
```java
public enum EnumSingleton {
INSTANCE;
public void doSomething() {
// 业务方法
}
}
```
#### 实现要点
1. 私有构造函数:防止外部直接实例化
2. 静态实例变量:保证全局唯一性
3. 静态获取方法:提供全局访问点
4. 线程安全:确保多线程环境下正常工作
5. 防止序列化破坏:通过readResolve方法防止反序列化创建新实例
6. 防止反射攻击:在构造函数中添加检查逻辑
#### 选择建议
- 需要延迟加载:使用静态内部类或双重检查锁
- 简单场景:枚举实现(天然防止反射和序列化破坏)
- 性能要求高:饿汉式(无锁,类加载时初始化)
每种实现方式都有其适用场景,应根据具体需求选择最合适的实现方案。
更多推荐



所有评论(0)