此页面描述了Factory Method
和Abstract Factory
之间的一个重要区别:
http://architects.dzone.com/articles/factory-method-vs-abstract
根据此页面,差异在于Factory Method
模式中Creator
(即创建新对象的实体)和Client
(即使用{{1}的实体}})同一个类。更确切地说,此模式仅定义方法,因此该类的其余部分为Creator
。但是,在Client
中,Abstract Factory
和Creator
是单独的类。 Client
的唯一目的是创建对象,因此只有一个单独的类可以是Creator
。
这种区别是否正确?如果是这样,为什么Client
中的Creator
方法可以放在一个单独的类中?它会产生任何问题吗?同样,为什么Factory Method
中的Creator
班级与Abstract Factory
的班级相同?这会产生任何问题吗?
答案 0 :(得分:1)
如果正确使用了抽象工厂模式,则客户端只知道抽象工厂基类,并且不了解具体实现。因此,客户端也不能成为创建者,因为它会将客户端和创建代码耦合在一起,这正是抽象工厂模式旨在防止的。
通常描述工厂方法模式的方式,实际上没有一个类扮演创建者的角色。唯一的“创建”代码在工厂方法本身。如果包含工厂方法的类只是将创建的对象传递给客户端并且确实扮演“创建者”的角色,那么您所拥有的是抽象工厂模式(尽管只有一个产品系列的特殊情况)。您会注意到抽象工厂模式通常使用工厂方法实现。