工厂方法模式的适用性

Applicability for the Factory Method Pattern

我对工厂方法模式感到困惑。

以下代码来自“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();

在网站中,我们在两种情况下应用了这种模式

  1. 当 class 无法预测它应该创建的对象的类型时
  2. 当 class 希望其子class 成为指定新创建对象类型的对象时

但是在客户端代码中,我们将 'new' keword 与 ConcreteCreator 放在一起(我知道这是具体产品的具体工厂)。

这不是说客户端完全知道 he/she 需要创建什么类型的对象吗?

谁能帮帮我?

在工厂方法模式中,Client的作用是提供一个具体的Product到抽象的Creator

当抽象 Creator 存在于 third-party 库中并且每个 Client 都需要通过实现自己的子类来提供 Product 时,这最有意义。在这种情况下,Client 正在实现一个它不拥有的抽象。

即使 Client 拥有抽象,如果它需要创建多个子类(即多个 Product),工厂方法也可能有用。

Client 拥有抽象并且只有一个 Product.

时,工厂方法没有意义