工厂方法模式的适用性
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();
在网站中,我们在两种情况下应用了这种模式
- 当 class 无法预测它应该创建的对象的类型时
- 当 class 希望其子class 成为指定新创建对象类型的对象时
但是在客户端代码中,我们将 'new' keword 与 ConcreteCreator 放在一起(我知道这是具体产品的具体工厂)。
这不是说客户端完全知道 he/she 需要创建什么类型的对象吗?
谁能帮帮我?
在工厂方法模式中,Client
的作用是提供一个具体的Product
到抽象的Creator
。
当抽象 Creator
存在于 third-party 库中并且每个 Client
都需要通过实现自己的子类来提供 Product
时,这最有意义。在这种情况下,Client
正在实现一个它不拥有的抽象。
即使 Client
拥有抽象,如果它需要创建多个子类(即多个 Product
),工厂方法也可能有用。
当 Client
拥有抽象并且只有一个 Product
.
时,工厂方法没有意义
我对工厂方法模式感到困惑。
以下代码来自“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();
在网站中,我们在两种情况下应用了这种模式
- 当 class 无法预测它应该创建的对象的类型时
- 当 class 希望其子class 成为指定新创建对象类型的对象时
但是在客户端代码中,我们将 'new' keword 与 ConcreteCreator 放在一起(我知道这是具体产品的具体工厂)。
这不是说客户端完全知道 he/she 需要创建什么类型的对象吗?
谁能帮帮我?
在工厂方法模式中,Client
的作用是提供一个具体的Product
到抽象的Creator
。
当抽象 Creator
存在于 third-party 库中并且每个 Client
都需要通过实现自己的子类来提供 Product
时,这最有意义。在这种情况下,Client
正在实现一个它不拥有的抽象。
即使 Client
拥有抽象,如果它需要创建多个子类(即多个 Product
),工厂方法也可能有用。
当 Client
拥有抽象并且只有一个 Product
.