- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我读过《Effective Java》,其中指出单例最好使用 enum
实现。
This approach is functionally equivalent to the public field approach, except that it is more concise, provides the serialization machinery for free, and provides an ironclad guarantee against multiple instantiation, even in the face of sophisticated serialization or reflection attacks. While this approach has yet to be widely adopted, a single-element enum type is the best way to implement a singleton.
尽管如此,这似乎是实现动态序列化和真正的单实例的权衡,但是您失去了经典单例的更友好的 OOP 方法。枚举不能被继承,只能实现一个接口(interface),如果你想提供一个骨架类,你需要创建一个辅助类。
那么,除了上述原因之外,为什么我们应该接受枚举作为单例的最佳实现呢?
最佳答案
this seems like a trade-off to achieve on the fly serialization
对我来说,写这样的东西要简单得多,更简洁
enum Singleton {
INSTANCE;
}
如果您需要编写更多代码或引入复杂性,那么就这样做,但恕我直言,这很少需要。
you lose the more friendly OOP approach of a classical singleton.
我发现使用字段更简单。
Enums can't be inherited,
确实如此,但是拥有多个单例本身就值得怀疑。枚举可以从接口(interface)继承,这允许您将一种实现交换为另一种实现。
If you want to provide a skeleton class you need to create a helper class
辅助类没有任何状态。骨架类可能有某种状态,在这种情况下您需要委派。
顺便说一句:您可以使用 enum
作为辅助类
enum Helper {;
public static my_static_methods_here;
}
why should we accept enum as the best implementation for a singleton
我会遵循 YAGNI原则。只开发您需要的内容,而不是您想象可能需要的内容。
关于java - 为什么枚举是单例的最佳实现?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/61723461/
我是一名优秀的程序员,十分优秀!