工厂方法是类设计模式。抽象工厂使用了许多工厂方法。为什么抽象工厂是对象设计模式,而不是类设计模式?抽象工厂将实例化推迟到哪个对象?
发布于 2012-07-03 10:46:22
抽象工厂模式将产品对象的创建推迟到ConcreteFactory子类。由于客户端期望工厂类(它是ConcreteFactory子类的父类)作为方法参数;根据传递的ConcreteFactory实例,将创建相应的产品实例。因此,抽象工厂通过在运行时传递的ConcreteFactory实例上调用工厂方法来创建产品实例。因此,这就是对象设计模式。通常,这些混凝土工厂都是单例的。
但是,工厂方法发生在类级别。必须创建一个新的ConcreteFactory类来实例化ConcreteProduct。这个ConcreteFactory扩展了工厂类,它有一个返回产品的create()方法。ConcreteFactory覆盖工厂父类中定义的create()方法。
在评论中:
是的,工厂方法是参数化的,但在AbstractFactory中,您将能够调用传递的ConcreteFactory上的方法,从而使您能够在运行时切换到不同的ConcreteFactory。但是在工厂中,因为create()是类的一部分,所以如果你想创建具体的产品,你必须创建扩展父工厂类的ConcreteFactory。
https://stackoverflow.com/questions/11303636
复制相似问题