gpt4 book ai didi

java - 工厂模式中是否需要工厂方法?

转载 作者:行者123 更新时间:2023-11-30 05:25:17 24 4
gpt4 key购买 nike

我正在尝试更好地理解工厂设计模式。

据我了解,该模式通常包括以下内容(情况总是如此吗?):

1. Product
2. Concrete Product
3. Creator
4. Concrete Creator

据我了解,工厂方法的要点是 Creator 可能看起来像

Public abstract class Creator
public void doSomething(){
Product product= createProduct();
product.doSomethingElse();
}

public abstract Product createProduct();
}

其中 createProduct() 是工厂方法。

然后,当创建具体创建者时,我们重写Creator.createProduct()

如果这个工厂方法仅用于创建产品,这是否意味着我们在技术上可以没有工厂方法,但仍然遵循工厂模式?

例如,代替

Public ConcreteCreator extends Creator{
public Product createProduct(){
return new ConcreteProduct()
}
}

我们做类似的事情

Public ConcreteCreator extends Creator{
Product product;
public ConcreteCreator(){
this.product = new ConcreteProduct;
}
}

并将 Creator 更改为类似的内容

Public abstract class Creator
Product product;
public void doSomething(){
this.product.doSomethingElse();
}
}

看起来这基本上与工厂模式做了相同的事情,其中​​具体产品仍然负责创建自己的具体产品,只不过它在构造函数中执行而不是覆盖工厂方法。

这是否只是因为将 ConcreteProducts 的创建逻辑从构造函数移到工厂方法中更清晰(即仅根据需要创建具体产品等)而没有这样做?或者在某些情况下,如果我们只在 ConcreteCreator 的构造函数中创建 ConcreteProducts,我们将无法保持相同的行为?

最佳答案

我认为让您感到困惑的问题是您不应该在 Creator 类中拥有 doSomething() 方法。工厂类应该负责创建产品,而不是其他。换句话说,工厂类不使用自己的产品。因此你的 Creator 类不是一个抽象工厂。

关于java - 工厂模式中是否需要工厂方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58804597/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com