sa_*_*dem 15 java singleton enums design-patterns
我读过Effective Java,并指出Singleton最好使用Enum实现.
这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.
尽管如此,这似乎是实现快速序列化和真正的单一实例的权衡,但是你放弃了经典单例的更友好的oop方法.枚举不能被继承,只能扩展一个接口,如果你想提供一个骨架类,你需要创建一个辅助类.
那么,除了上述原因之外,为什么我们应该接受Enum作为Singleton的最佳实现呢?
Pet*_*rey 15
这似乎是实现快速序列化的权衡
对我来说,写一些类似的东西更简单,更简洁
enum Singleton {
INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)
如果您需要编写更多代码或引入复杂性,那么这样做,但这很少需要恕我直言.
你放松了古典单身人士更友好的oop方法.
我发现使用字段更简单.
枚举不能继承,
没错,但拥有多个单身人士本身就是可疑的.枚举可以从接口继承,允许您将一个实现交换为另一个实现.
如果要提供骨架类,则需要创建辅助类
辅助类没有任何状态.骨架类可能具有某种状态,在这种情况下您需要委派.
顺便说一句:你可以enum用于帮助类
enum Helper {;
public static my_static_methods_here;
}
Run Code Online (Sandbox Code Playgroud)
为什么我们应该接受Enum作为Singleton的最佳实现
我会遵循YAGNI原则.只开发你需要的东西,而不是你想象的你可能需要的东西.
Ste*_*stl 11
不久前在stackoverflow上也有过类似的讨论:在Java中实现单例模式的有效方法是什么?
接受的答案提供了有关该主题的良好链接:
Joshua Bloch 在Google I/O 2008的Effective Java Reloaded演讲中解释了这种方法:链接到视频.另见他演示文稿的幻灯片30-32(effective_java_reloaded.pdf):
重点是,编写一个真正的单例是非常困难的.枚举值保证只存在一次.
| 归档时间: |
|
| 查看次数: |
6757 次 |
| 最近记录: |