【发布时间】:2011-06-04 18:38:14
【问题描述】:
我正在学习Effective Java,而我的一些我认为是标准的东西在书中没有建议,例如创建对象,我的印象是构造函数是最好的方法这样做和书籍说我们应该使用静态工厂方法,我不能少一些优点和缺点,所以我问这个问题,这里是使用它的好处。
优点:
- 静态工厂方法的一个优点是,与构造函数不同,它们 有名字。
- 静态工厂方法的第二个优点是,与构造函数不同, 每次调用它们时都不需要创建新对象。
- 静态工厂方法的第三个优点是,与构造函数不同, 它们可以返回其返回类型的任何子类型的对象。
- 静态工厂方法的第四个优点是它们减少了冗长 创建参数化类型实例。
缺点:
- 仅提供静态工厂方法的主要缺点是 没有公共或受保护构造函数的类不能被子类化。
- 静态工厂方法的第二个缺点是它们不是 很容易与其他静态方法区分开来。
参考:Effective Java,Joshua Bloch,第 2 版,第 5-10 页
我无法理解第四个优势和第二个劣势,如果有人能解释这些观点,我将不胜感激。我还想了解如何决定使用构造函数还是静态工厂方法来创建对象。
【问题讨论】:
-
恕我直言,它归结为复杂性:如果您的代码不会被除您之外的任何人扩展,您是否需要创建更多复杂性?
-
即使没有其他人打算扩展代码,如果你在几个月后回来做维护/错误修复等,它仍然需要很容易理解
-
那么,说构造函数不会创建复杂性而静态工厂方法会足够公平吗?我试图了解哪种方式会带来更多的复杂性?
标签: java design-patterns object static constructor