Mad*_*kle 12 java constructor design-patterns factory-pattern effective-java
我一直在阅读Joshua Bloch撰写的Effective Java,到目前为止,它确实辜负了它的声誉.第一个项目为构造函数的静态工厂方法提供了令人信服的案例.这么多,我开始质疑好老建设者的有效性:).
本书的优点/缺点总结如下:
好处:
- 他们有名字!
- 我们有全面的实例控制(单身人士,表现等)
- 他们可以返回子类型/接口
- 编译器可以提供类型推断
缺点:
- 私有类不能被子类化
- 它们不像构造函数那样在文档中脱颖而出
第一个缺点实际上可能是A Good Thing(正如书中所提到的).第二个,我认为只是一个小缺点,可以通过即将发布的java版本(javadoc的注释等)轻松解决.
看起来,最终工厂方法几乎具有构造函数的所有优点,许多优点,并没有真正的缺点!
所以,我的问题基本上分为三个部分:
注意:有两个类似的问题:何时使用构造函数以及何时使用getInstance()方法(静态工厂方法)?和对象的创建:构造函数或静态工厂方法.然而,答案要么只是提供上面的列表,要么重申我已经知道的静态工厂方法背后的基本原理.
静态工厂仍然必须最终调用构造函数.您可以将大部分功能移动到静态工厂中,但无法避免使用构造函数.
另一方面,对于简单的情况,您可以只拥有一个没有静态工厂的构造函数.
构造函数是设置最终字段的唯一方法,IMHO优于非最终字段.
您可以在子类中使用构造函数.您不能将静态工厂用于子类.
如果您有一个良好的依赖注入框架来构建组件的依赖关系,您可能会发现静态工厂不会添加太多.
| 归档时间: |
|
| 查看次数: |
1235 次 |
| 最近记录: |