为什么我们需要工厂方法模式?

时间:2014-05-04 09:17:19

标签: design-patterns factory-pattern

我现在正在学习factory method设计模式,在此之前我学习了simple factory模式。 我认为simple factory很有用,因为它将if/else控制流转移到工厂,因此可以保留产品的纯度。然后我学会了factory method模式,我认为它复杂而美丽。

但是,我发现if/else模式中没有factory method控制流,客户端知道它将使用哪个产品,客户端选择相应的工厂。 例如

Factory factory = new SpecificFactory;
Product product = new SpecificProduct;
好吧,既然客户知道他们想要使用哪种产品(没有if/else控件),为什么只需要简单的新的SpecificProduct为什么需要额外的工厂呢?

我搜索了它,但没有找到令人满意的答案 事实上,我想问的是Why do we need Abstract factory design pattern?,除了这个是工厂方法而不是抽象工厂。

1 个答案:

答案 0 :(得分:0)

GoF书中为此模式定义的意图是

  

定义用于创建对象的接口,但让子类决定   要实例化的类。工厂方法允许班级推迟   实例化到子类。

仍有条件选择,但它隐藏在客户端的继承结构中。

动机部分中使用的示例是可以向用户呈现多个文档的应用程序框架。

在此示例中,有两个抽象类ApplicationDocument,它们根据(例如)DrawingApplicationDrawingDocument进行了子类化。 DrawingApplication知道它创建的任何文档都应该是DrawingDocument,但超类Application不会。因此CreateDocumentApplication中成为一个抽象方法,并在子类中实现,以创建适当类型的文档。