我现在正在学习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?,除了这个是工厂方法而不是抽象工厂。
答案 0 :(得分:0)
GoF书中为此模式定义的意图是
定义用于创建对象的接口,但让子类决定 要实例化的类。工厂方法允许班级推迟 实例化到子类。
仍有条件选择,但它隐藏在客户端的继承结构中。
动机部分中使用的示例是可以向用户呈现多个文档的应用程序框架。
在此示例中,有两个抽象类Application
和Document
,它们根据(例如)DrawingApplication
和DrawingDocument
进行了子类化。 DrawingApplication
知道它创建的任何文档都应该是DrawingDocument
,但超类Application
不会。因此CreateDocument
在Application
中成为一个抽象方法,并在子类中实现,以创建适当类型的文档。