Enum Singleton
Version >= Java SE 5
public enum Singleton {
INSTANCE;
public void execute (String arg) {
// Perform operation here
}
}
枚举有私有构造函数,是最终的并提供适当的序列化机制。它们也非常简洁,并以线程安全的方式初始化。
JVM 提供了一个保证,即枚举值不会多次实例化,这使得枚举单例模式能够很好地防御反射攻击。
枚举模式无法防范的是其他开发人员在源代码中物理添加更多元素。因此,如果你为单例选择此实现样式,则必须非常清楚地记录不应将新值添加到这些枚举中。
这是实现单例模式的推荐方法,正如 Joshua Bloch 在 Effective Java 中所解释的那样 。