工厂方法(1)vs工厂(2)vs生成器(3)模式



什么是用例(1)、(2)、(3)。什么是pro&使用它的缺点。它们之间有什么区别?

工厂方法模式

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

你可以把这看作是去机票柜台(管制员),通过提供你对机票类型(头等舱、行政舱或经济舱)的偏好来索要机票。用户并不关心如何生成票证,即使在对象表示中,第一类和经济票证都是从基本票证类派生的。

何时使用

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


工厂模式或简单工厂模式

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


生成器模式

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

而另一位顾客可能会要求提供一顿配有大薯条和无糖可乐的饭。同样,订单柜台的人员负责构建与第一个不同的订单。从顾客的角度来看,订单总是在柜台上,然后是退货。

何时使用

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

更多信息

  • 设计模式:抽象工厂与工厂方法
  • 关于原型模式的问题
  • 建设者模式与工厂模式
  • 创造性模式
  • 创意设计模式

最新更新