Java语言枚举单例

示例

Java SE 5
public enum Singleton {
    INSTANCE;

    public void execute (String arg) {
        // 在这里执行操作 
    }
}

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

JVM提供了一个保证,每个枚举值不会被多次实例化,这为枚举单例模式提供了非常强大的防御反射攻击的能力。

枚举模式不能避免的是其他开发人员实际上在源代码中添加了更多元素。因此,如果您为单身人士选择此实现样式,则必须非常清楚地说明不要将任何新值添加到这些枚举中。

这是实现单例模式的推荐方法,如Joshua Bloch在Effective Java中所述。