0

对于一个小型系统,我使用工厂方法创建相关对象(从父类继承),这样我就可以在不指定对象类型的情况下动态创建对象。我必须创建另一个没有子类的对象,并且该对象是用户类的实例。为了正确理解工厂方法模式,我不必为最后一个类创建工厂方法,对吧?

4

2 回答 2

1

工厂模式不仅仅关乎类型的灵活性。例如,JavaInteger.valueOf(int)已经有了new Integer(int). 工厂变体允许缓存:每次调用Integer.valueOf(1)将返回相同的实例。这适用于所有不可变对象。

另一个非常重要的考虑点是对象初始化:有一些初始化模式在对象正在构建时完成是不安全的。例如,调用任何可覆盖的方法。工厂模式也优雅地解决了这些情况。

我个人会主张第三个好处,但这对某些人来说可能是有争议的:我更喜欢编写没有new. 例如,new OidableBinding(vb)我不喜欢写oidableBinding(vb). 这可以通过静态导入实现。所以附带说明:不要命名您的工厂方法getInstance或类似名称。将其命名为与类型名称相似,以便该方法在静态导入时看起来不错(并且不会与其他温和命名的工厂方法产生名称冲突)。

于 2012-08-26T19:19:19.993 回答
0

我认为如果您现有的工厂正在为相关对象提供服务,那么您可能想要创建另一个工厂。我认为即使您的工厂只创建一种类型的对象也可以。

于 2012-08-27T06:07:43.950 回答