【问题标题】:Why we need factory method pattern at all?为什么我们需要工厂方法模式?
【发布时间】:2023-04-06 20:18:01
【问题描述】:

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

然而,我突然想到factory method模式中已经没有if/else控制流,客户知道它将使用哪个产品,客户选择相应的工厂。 例如

Factory factory = new SpecificFactory;
Product product = new SpecificProduct;

好吧,既然客户知道他们想要使用哪个产品(没有if/else 控制),为什么只是简单的新SpecificProduct 为什么需要额外的工厂?

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

【问题讨论】:

  • 仍然,您希望您的产品初始化只封装在一个地方。初始化可能不仅仅是调用 SpecificProduct 类的构造函数。
  • 在您需要它之前,您不需要它。在你遇到问题之前,没有任何答案是有意义的。然后你会发现你的解决方案实际上是一种设计模式。

标签: design-patterns factory-pattern


【解决方案1】:

GoF 书中为此模式定义的 Intent 是

定义创建对象的接口,但让子类决定 要实例化哪个类。工厂方法让类延迟 实例化到子类。

还有一个条件选择,只是隐藏在客户端的继承结构中。

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

在此示例中,有两个抽象类 ApplicationDocument,它们是适当的子类(例如)DrawingApplicationDrawingDocumentDrawingApplication 知道它创建的任何文档都应该是 DrawingDocument,但超类 Application 不知道。所以CreateDocumentApplication中被做成一个抽象方法,并在子类中实现以创建合适的文档类型。

【讨论】:

    猜你喜欢
    • 2021-07-05
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-20
    • 1970-01-01
    相关资源
    最近更新 更多