软件设计师 上午题 设计模式
软件设计师 上午题 设计模式
每一个模式描述了一个在我们周围不断重复发生的问题,以及该问题的解决方案的核心。这样,你就能一次又一次地使用该方案而不必做重复劳动。[1]
设计模式提供了相关问题的解决方案,使得人们可以更加简单方便地复用成功的设计和体系结构,其中一般有以下4个基本要素:
- 模式名称:一个助记名,用一两个词来描述模式的问题、解决方案和效果。
- 问题:问题描述了应该在何时使用模式。
- 解决方案:解决方案描述了设计的组成成分、它们之间的相互关系以及各自的职责和协作方式。
- 效果:效果描述了模式应用的效果以及使用模式应权衡的问题。
而总的来说,设计模式部分的内容可以按着下面这个表格梳理:

一、创建型设计模式
创建型设计模式的侧重点为对象创建机制,也就是说通过控制对象的创建方式来提升代码的灵活性和可复用性。
因此,创建型模式在什么被创建,谁创建它,它是怎样被创建的,以及何时创建这些方面给予了很大的灵活性。它们允许用结构和功能差别很大的“产品”对象配置一个系统。配置可以是静态的(即在编译时指定),也可以是动态的(在运行时)。[1]
一般来说,创建型设计模式有以下几种具体的实现方式:
Ⅰ 工厂模式
工厂模式是最常见的设计模式之一,它提供了一种使得创建对象的过程与使用对象的过程分离的方式,使得用户在创建对象时无需指定要创建的具体类。就如同如果朱博宁去买高铁,它只需要去提车即可,不需要关心高铁是如何制造出来的。工厂模式具体有以下几种:
1. 简单工厂模式
简单工厂模式不属于GoF 23种设计模式,但它是工厂方法模式实现的基础。简单工厂模式提供一个静态工厂方法,可以根据传入的参数决定创建哪种具体产品类的实例。但这显然违背了开闭原则(Open for extension, closed for modification),如果要新增产品就要修改工厂逻辑。
2. 工厂方法模式
和简单工厂模式不同的是,工厂方法模式中定义了一个创建对象的接口,这样一来就满足了开闭原则。

在工厂方法模式当中,父类(抽象工厂)只声明创建方法(比如上图中的createProduct()
)而不关心具体实现,子类(具体工厂)负责实现父类的创建方法并返回具体的产品实例。
3. 抽象工厂模式
和工厂方法模式当中创建单一产品不同的是,抽象工厂模式当中创建了一个产品家族,即一系列相关或相互依赖的的对象。

Ⅱ 生成器模式
生成器模式的特点是将对象的构造过程与其表示分离,使得同样的构建过程可以创建不同的表示,主要用于分步骤构建复杂对象,其结构如下所示:

Ⅲ 原型模式
原型模式的核心思想是通过复制现有对象(原型)来创建新对象,而不是通过new
实例化。因此原型模式可以基于克隆快速生成对象,避免重复执行耗时的初始化操作。其结构如下所示:

Ⅳ 单例模式
单例模式确保一个类中只有一个实例,并提供一个全局访问点。它通过控制实例化过程,避免重复创建对象,节省资源。其结构如下所示:

Ⅴ 真题赏析

ACAD,对于(45)而言,所谓的构造一个使用Builder接口的对象
指的就是控制整个流程的类,是Director(指挥者),那么对于本题而言就是Waiter。此外,对于(47)而言,Builder模式适用于:1)创建复杂对象的算法应该独立于该对象的组成部分以及装配方式时;2)当构造过程必须允许被构造对象有不同的表示时。
二、结构型设计模式
三、行为型设计模式

B,
- 软件设计师教程(第五版). (2018). ↩