接前一篇文章:软考 系统架构设计师系列知识点之设计模式(1)

所属章节:

老版(第一版)教材

第7章. 设计模式

        第2节. 设计模式实例

1. 创建型模式

创建型模式是对对象实例化过程的抽象,它通过采用抽象类所定义的接口封装了系统中对象如何创建、组合等信息

在系统中,创建型模式支持对象的创建。该模式允许在系统中创建对象,而不需要在代码中标识特定类的类型,这样用户就不需要编写大量、复杂的代码来初始化对象。它是通过该类的子类来创建对象的。但是,这可能会限制在系统内创建对象的类型或数目。创建型模式包括:

  • Abstract Factory(抽象工厂)
  • Builder(构建器)
  • Factory Method(工厂方法)
  • Prototype(原型)
  • Singleton(单例)

(1)Abstract Factory(抽象工厂)模式

不指定具体类的情况下,这种模式为创建一系列相关或相互依赖的对象提供了一个接口。根据给定的相关抽象类,Abstract Factory模式提供了从一个相匹配的具体子类集创建这些抽象类的实例的方法。

AbstractFactory模式提供了一个可以确定合适的具体类的抽象类,这个抽象类可以用来创建实现标准接口的具体产品的集合。客户端只与产品接口和Abstract Factory类进行交互。使用这种模式,客户端不用知道具体的构造类。Abstract Factory模式类似于Factory Method模式,但是Abstract Factory模式可以创建一系列的相关对象

Abstract Factory模式的优点如下:

  • 可以与具体类分开。
  • 更容易在产品系列中进行转换。
  • 提高了产品间的一致性。

在以下情况中,应该使用Abstract Factory模式:

  • 系统独立于产品的创建、组成以及表示。
  • 系统配置成具有多个产品的系列,如Microsoft Windows或Apple McIntosh类。
  • 相关产品对象系列是共同使用的,而且必须确保这一点。这是该模式的关键,否则可以使用Factory Method模式。
  • 希望提供产品的类库,只开放其接口,而不是其实现。

(2)Builder(构建器)模式

Builder模式将复杂对象的构建与其表示相分离,这样相同的构造过程可以创建不同的对象通过只指定对象的类型和内容,Builder模式允许客户端对象构建一个复杂对象。客户端可以不受该对象构造的细节的影响。这样通过定义一个能够构建其它类实例的类,就可以简化复杂对象的创建过程。Builder模式生产一个主要产品,而该产品可能有多个类,但是通常只有一个主类。当使用Builder模式时,可以一次性就创建所有的复杂对象,而其它模式一次就只能创建一个对象。

Builder模式的优点如下

  • 可以对产品的内部表示进行改变。
  • 将构造代码与表示代码相分离。

在以下情况中,应该使用Builder模式:

  • 创建复杂对象的算法独立于组成对象的部分以及这些部分的集合方式。
  • 构造过程必须允许已构建对象有不同表示。

(3)Factory Method(工厂方法)模式

Factory Method模式定义了创建对象的接口,它允许子类决定实例化哪个类。它允许类将实例化工作交给其子类,这对于在特定目的下构建单个对象是非常有帮助的,而且它不需要请求者知道要被实例化的特定类,这就可以在不修改代码的情况下引入新类,因为新类只实现了接口,这样它就可以被客户端使用。可以创建一个新的Factory类来创建新类,而由这个Factory类来实现Factory接口。

Factory Method模式的优点如下:

  • 没有了将应用程序类绑定到代码中的要求,代码只处理接口,因此可以使用任何实现了接口的类。
  • 允许子类提供对象的扩展版本,因为在类中创建对象比直接在客户端创建要更加灵活。

在以下情况中,应该使用Factory Method模式:

  • 类不能预料它必须创建的对象的类。
  • 类希望其子类指定它要创建的对象。
  • 类将责任转给某个帮助子类,而用户希望定位那个被授权的帮助子类。

(4)Prototype(原型)模式

Prototype模式允许对象在不了解要创建对象的确切类以及如何创建等细节的情况下创建自定义对象。使用Prototype实例,便指定了要创建的对象类型,而通过复制这个Prototype,就可以创建新的对象。Prototype模式是通过先给出一个对象的Prototype对象,然后再初始化对象的创建创建初始化后的对象再通过Prototype对象对其自身进行复制来创建其它对象。Prototype模式使得动态创建对象更加简单,只要将对象类定义成能够复制自身就可以实现。

Prototype模式的优点如下:

  • 可以在运行时添加或删除产品。
  • 通过改变值指定新对象。
  • 通过改变结构指定新对象。
  • 减少子类的生成和使用。
  • 可以用类动态地配置应用程序。

在以下情况中,应该使用Prototype模式:

  • 在运行时,指定需要例化的类,例如动态载入。
  • 避免构建与产品的类层次结构相似的工厂类层次结构。
  • 当类的实例是仅有的一些不同状态组合之一的时候。

(5)Singleton(单例)模式

Singleton模式确保一个类只有一个实例并且提供了对该类的全局访问入口,它可以确保使用这个类实例的所有的对象使用相同的实例

Singleton模式的优点如下:

  • 对单个实例的受控制访问。
  • 名称空间的减少。
  • 允许改进操作和表示。
  • 允许可变数目的实例。
  • 比类操作更灵活。

在以下情况中,应该使用Singleton模式:

只有一个类实例。

10-23 14:09