我读了 Effective Java 并且那里说单例最好使用enum
.
这种方法在功能上等同于公共字段方法,只是它更简洁,免费提供序列化机制,并提供针对多次实例化的铁定保证,即使面对复杂的序列化或反射攻击。虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方式。
尽管如此,这似乎是实现动态序列化和真正的单实例的权衡,但是您失去了经典单例的更友好的 OOP 方法。枚举不能被继承,只能实现一个接口,如果你想提供一个骨架类,你需要创建一个帮助类。
那么,除了上述原因之外,我们为什么要接受枚举作为单例的最佳实现呢?