我们是否需要更喜欢构造函数而不是静态工厂方法?如果是,什么时候?
2022-09-04 21:27:35
我一直在阅读Joshua Bloch的《Effective Java》,到目前为止,它确实不辜负它的声誉。第一项为构造函数上的静态工厂方法提供了令人信服的案例。如此之多,以至于我开始质疑:)的好的旧构造函数的有效性。
本书的优点/缺点总结如下:
优势:
- 他们有名字!
- 我们有完全的实例控制(单例、性能等)
- 它们可以返回子类型/接口
- 编译器可以提供类型推断
弊:
- 私有类不能被子类化
- 它们在文档中并不像构造函数那样突出
第一个缺点实际上可能是一件好事(如书中提到的)。第二个,我认为只是一个小缺点,可以通过即将发布的java版本(javadoc的注释等)轻松解决。
看起来,最终工厂方法几乎具备了构造函数的所有优点,优点还有很多,而且没有真正的缺点!
所以,我的问题基本上分为三个部分:
- 默认情况下,始终使用静态工厂方法而不是构造函数是一种好的做法吗?
- 使用构造函数是否合理?
- 为什么面向对象的语言不为工厂提供语言级支持?
注意:有两个类似的问题:何时使用构造函数,何时使用getInstance()方法(静态工厂方法)?和对象的创建:构造函数或静态工厂方法。然而,答案要么只是提供上面的列表,要么重申我已经知道的静态工厂方法背后的基本原理。