【发布时间】:2012-07-03 02:15:40
【问题描述】:
工厂方法是类设计模式。抽象工厂使用许多工厂方法。为什么抽象工厂是对象设计模式,而不是类设计模式?抽象工厂将实例化推迟到哪个对象?
【问题讨论】:
标签: design-patterns
工厂方法是类设计模式。抽象工厂使用许多工厂方法。为什么抽象工厂是对象设计模式,而不是类设计模式?抽象工厂将实例化推迟到哪个对象?
【问题讨论】:
标签: design-patterns
抽象工厂模式将产品对象的创建推迟到 ConcreteFactory 子类。由于客户端期望 Factory 类(它是 ConcreteFactory 子类的父类)作为方法参数;基于传递的 ConcreteFactory 实例,创建相应的产品实例。因此,Abstract Factory 通过在运行时传递的 ConcreteFactory 实例上调用工厂方法来创建产品实例。因此,这是对象设计模式。通常这些混凝土工厂是单例的。
不过,工厂方法发生在类级别。必须创建一个新的 ConcreteFactory 类来实例化一个 ConcreteProduct。这个 ConcreteFactory 扩展了 Factory 类,该类具有返回 Product 的 create() 方法。 ConcreteFactory 覆盖了 Factory 父类中定义的 create() 方法。
发表评论:
是的,工厂方法是参数化的,但在 AbstractFactory 中,您将能够调用传递的 ConcreteFactory 上的方法,从而使您能够在运行时切换到不同的 ConcreteFactory。但是在 Factory 中,由于 create() 是该类的一部分,因此如果您想创建具体产品,则必须创建 ConcreteFactory,它扩展了父 Factory 类。
【讨论】: