关于oop:工厂方法(1)vs工厂(2)vs Builder(3)模式

factory method (1) vs factory(2) vs Builder (3) pattern

什么是使用案例(1)、(2)、(3)。使用它的利弊是什么?他们之间有什么区别?


工厂方法模式

此模式与工厂模式非常相似,客户机还从类层次结构向工厂请求特定类型的对象,但工厂类的创建方法将特定对象的创建委托给派生类,并返回客户机请求的类型的类的对象。本质上,您有一个单一的接触点,用于创建一个类层次结构的多个对象。

您可以将其视为前往机票柜台(管制员),并通过提供您对机票类型(头等舱、行政舱或经济舱)的偏好来申请机票。用户不关心票是如何生成的,即使在对象表示中,头等舱和经济舱票都是从基本票类派生的。

何时使用

  • 灵活性很重要(低耦合)
  • 对象可以在子类中扩展
  • 之所以选择一个子类而不是另一个子类,有一个特定的原因。这种逻辑构成工厂方法的一部分。
  • 客户机将责任委托给并行层次结构中的子类。

工厂模式或简单工厂模式

此模式与工厂方法模式非常相似。但与工厂方法模式不同,这种模式要简单一些。工厂本身的create方法不是将创建委托给子类,而是创建所需类型的实例并返回它。

生成器模式

在构建器模式中,创建对象的复杂任务封装在类或方法中。例如,考虑在快餐柜台点餐的情况。这顿饭通常包括汉堡、薯条和饮料。每一道菜都有自己的制作过程。这个任务不是客户必须处理每个项目的创建过程,而是由订餐台处理。下订单时,柜台负责创建包含三个项目的餐点,并将项目作为餐点的单个实例返回给客户。

而另一位顾客可能会要求一顿配有大薯条和健怡可乐的饭。同样,订单柜台的人负责创建不同于第一个订单的订单。从客户的角度来看,每次都会下订单,然后是柜台,然后是送餐。

何时使用

  • 对象的构造不是一项简单的任务
  • 子部件构成每个对象
  • 客户需要一种以上(其中包含不同的子部分)的最终对象。如果不是同时发生,至少在不同的时间点,可能会发生对不同目标的需求。

更多信息

  • 设计模式:抽象工厂与工厂方法
  • 关于原型模式的问题
  • 生成器模式与工厂模式
  • 创建型模式
  • 创意设计模式