我读过Effective Java,并指出Singleton最好使用Enum实现.
这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.
尽管如此,这似乎是实现快速序列化和真正的单一实例的权衡,但是你放弃了经典单例的更友好的oop方法.枚举不能被继承,只能扩展一个接口,如果你想提供一个骨架类,你需要创建一个辅助类.
那么,除了上述原因之外,为什么我们应该接受Enum作为Singleton的最佳实现呢?