【发布时间】:2020-09-10 04:21:06
【问题描述】:
我对工厂方法模式感到困惑。
以下代码来自“https://www.oodesign.com/factory-method-pattern.html”
public interface Product { � }
public abstract class Creator
{
public void anOperation()
{
Product product = factoryMethod();
}
protected abstract Product factoryMethod();
}
public class ConcreteProduct implements Product { � }
public class ConcreteCreator extends Creator
{
protected Product factoryMethod()
{
return new ConcreteProduct();
}
}
public class Client
{
public static void main( String arg[] )
{
Creator creator = new ConcreteCreator();
creator.anOperation();
}
}
这是我感到困惑的地方:
Creator creator = new ConcreteCreator();
在网站中,我们在两种情况下应用这种模式
- 当一个类无法预测它应该创建的对象的类型时
- 当一个类希望其子类成为特定新创建对象类型的子类时
但在客户端代码中,我们将“新”关键字与 ConcreteCreator 放在一起(我知道这是具体产品的具体工厂)。
这不是说客户端完全知道他/她需要创建什么类型的对象吗?
谁能帮帮我?
【问题讨论】:
-
是的,客户知道他想要创建的具体类型(应该在代码中的某个地方做出这个决定)。接口
Creator是一般应如何创建产品的合同。 -
从那时起,如果我们在具体创建者中更改一些代码,例如我们要求客户端在这里放一个参数,我们仍然需要更改客户端代码。那么在我们的程序中使用这种模式和只使用'new'关键字有什么区别呢?因为看起来使用这种模式没有任何优势......
标签: design-patterns factory-method