Skip to content

单例模式

意图

保证一个类全局只有一个实例,并提供一个全局访问点。适用于配置中心、连接池管理器等需唯一协调者的场景。

类图

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。
  • 注意:单例不利于单元测试(可注入抽象或允许替换实例);分布式环境下「进程内单例」不等于集群唯一。