【问题标题】:factory method (1) vs factory(2) vs Builder (3) pattern工厂方法 (1) vs factory(2) vs Builder (3) 模式
【发布时间】:2012-02-05 11:51:54
【问题描述】:

什么是使用(1),(2),(3)的用例。使用它有什么优缺点。它们有什么区别?

【问题讨论】:

标签: oop design-patterns


【解决方案1】:

工厂方法模式

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

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

何时使用

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


工厂模式或简单工厂模式

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


建造者模式

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

而另一位顾客可能会要求一顿配大薯条和健怡可乐的餐点。同样,订单柜台的人负责建立与第一个订单不同的订单。从客户的角度来看,总是下订单,然后是柜台,然后是退回的饭菜。

何时使用

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

更多信息

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2012-10-18
    • 2010-11-09
    相关资源
    最近更新 更多