4

工厂方法是类设计模式。抽象工厂使用许多工厂方法。为什么抽象工厂是对象设计模式,而不是类设计模式?抽象工厂将实例化推迟到哪个对象?

4

1 回答 1

5

抽象工厂模式将产品对象的创建推迟到 ConcreteFactory 子类。由于客户端期望 Factory 类(它是 ConcreteFactory 子类的父类)作为方法参数;基于传递的 ConcreteFactory 实例,创建相应的产品实例。因此,抽象工厂通过在运行时传递的 ConcreteFactory 实例上调用工厂方法来创建产品实例。因此,这是对象设计模式。通常,这些混凝土工厂是单件。

然而,工厂方法发生在类级别。必须创建一个新的 ConcreteFactory 类来实例化一个 ConcreteProduct。这个 ConcreteFactory 扩展了 Factory 类,该类具有返回 Product 的 create() 方法。ConcreteFactory 覆盖了 Factory 父类中定义的 create() 方法。

回应评论:

是的,工厂方法是参数化的,但在 AbstractFactory 中,您将能够在传递的 ConcreteFactory 上调用方法,从而使您能够在运行时切换到不同的 ConcreteFactory。但是在 Factory 中,由于 create() 是类的一部分,因此如果要创建具体产品,则必须创建 ConcreteFactory 来扩展父 Factory 类。

于 2012-07-03T02:46:21.897 回答