【发布时间】:2012-03-16 05:48:04
【问题描述】:
阅读Effective Java,似乎使用静态工厂方法有很多优点,而缺点很少。通过静态工厂方法,我特别指以下
public class MyClass {
private MyClass() { ... };
public static MyClass getInstance() {
return new A();
}
}
来自 Effective Java:
请注意,静态工厂方法与设计模式中的工厂方法模式不同 [Gamma95, p. 107]。此项中描述的静态工厂方法在设计模式中没有直接等效方法。
现在最好始终遵循这种做法,还是只偶尔遵循?
如果是什么时候?
这样做是不是有点矫枉过正?
【问题讨论】:
-
矫枉过正。只有你自己可以判断。一般来说,我会告诫您不要盲目地遵循任何已获得的智慧。你通常会发现所有用来对冲原始陈述的原始限定都被遗忘了,只剩下规则,通常没有人真正知道为什么。
-
在这种情况下,我们很幸运,因为原始文本在有效 Java 条款 1 中得到了保留。但我不确定我对此的解释是否正确。
-
我会说这通常是矫枉过正,除非您有特定的原因想要隐藏正在创建的实际类型,这基本上是当您想要使用工厂模式时。我建议在大多数情况下并非如此。想想如果你不能构造一个字符串或线程,生活会是什么样子。