Appearance
单例模式
意图
保证一个类全局只有一个实例,并提供一个全局访问点。适用于配置中心、连接池管理器等需唯一协调者的场景。
类图
Java 示例
饿汉式(线程安全、类加载即创建)
java
public final class ConfigHolder {
private static final ConfigHolder INSTANCE = new ConfigHolder();
private ConfigHolder() {}
public static ConfigHolder getInstance() {
return INSTANCE;
}
}双重检查锁定(懒加载)
java
public final 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;
}
}枚举单例(《Effective Java》推荐,防反射与序列化破坏)
java
public enum EnumSingleton {
INSTANCE;
public void doSomething() { /* ... */ }
}适用与注意
- 适用:确实需要全局唯一、且创建成本可接受或与生命周期绑定 JVM。
- 注意:单例不利于单元测试(可注入抽象或允许替换实例);分布式环境下「进程内单例」不等于集群唯一。