使用单元素枚举实现 Singleton 模式

枚举常量在第一次引用枚举时实例化。因此,这允许使用单元素枚举实现 Singleton 软件设计模式。

public enum Attendant {

    INSTANCE;

    private Attendant() {
        // perform some initialization routine
    }

    public void sayHello() {
        System.out.println("Hello!");
    }
}

public class Main {

    public static void main(String... args) {
        Attendant.INSTANCE.sayHello();// instantiated at this point
    }
}

根据 Joshua Bloch 的 Effective Java 一书,单元素枚举是实现单例的最佳方法。这种方法具有以下优点:

  • 线程安全
  • 保证单一实例化
  • 开箱即用的序列化

并且如实现接口部分所示,该单例也可以实现一个或多个接口。