aka*_*okd 2 java singleton enums
是否有(表演)惩罚*以任何方式与Enum Singleton模式相关联,因为它似乎比传统的单一模式或内部持有者类习惯用得少?
*惩罚,例如在不需要的情况下可串行化的成本等,或者因为很少有开发人员阅读Effective Java 2nd Edition而使用率很低?
所有Java单例模式(包括此标准和私有构造函数和静态访问器的标准)都具有这种不良属性,如果您测试它们(或测试甚至远程依赖它们的任何东西),则可以使用此对象.
例如,如果你想测试PrintingService依赖于PrintingSingleton你的类将无法用mock替换这个打印单例,因为它是静态绑定的.
即想象一下测试这个功能
boolean printDocument(Document d) {
if (PrintingSingleton.INSTANCE.isPrinterEnabled()) {
PrintingSingleton.INSTANCE.print(d);
}
throw new RuntimeExeption("Printing not enabled");
}
Run Code Online (Sandbox Code Playgroud)
通过测试
@Test(expectedExceptions = {RuntimeException.class})
public void testPrinting() {
PrintingService service = ...
service.print(new Document()); // How will you simulate
// throwing an exception?
}
Run Code Online (Sandbox Code Playgroud)
就个人而言,我只是避免使用单例,而是通过Guice,Spring或Pico Container引入依赖注入.这样你就可以确保只存在一个对象,同时不限制自己无法模拟对象,例如测试.
| 归档时间: |
|
| 查看次数: |
2630 次 |
| 最近记录: |