Enum Singleton

Version >= Java SE 5

public enum Singleton {
    INSTANCE;

    public void execute (String arg) {
        // Perform operation here 
    }
}

枚举有私有构造函数,是最终的并提供适当的序列化机制。它们也非常简洁,并以线程安全的方式初始化。

JVM 提供了一个保证,即枚举值不会多次实例化,这使得枚举单例模式能够很好地防御反射攻击。

枚举模式无法防范的是其他开发人员在源代码中物理添加更多元素。因此,如果你为单例选择此实现样式,则必须非常清楚地记录不应将新值添加到这些枚举中。

这是实现单例模式的推荐方法,正如 Joshua Bloch 在 Effective Java 中所解释的那样