《软件设计师》复习笔记(14.3)——设计模式
目录
一、设计模式分类
1. 创建型模式(Creational Patterns)
2. 结构型模式(Structural Patterns)
3. 行为型模式(Behavioral Patterns)
真题示例:
一、设计模式分类
- 架构模式
- 高层设计决策(如C/S结构)。
- 设计模式
- 解决重复发生的问题,提供可复用的解决方案。
- 四要素:模式名称、问题、解决方案、效果。
- 惯用法
- 与编程语言相关的底层模式(如C++的引用计数)。
1. 创建型模式(Creational Patterns)
模式名称(中文) | 模式名称(英文) | 定义 | 记忆关键字 |
---|---|---|---|
抽象工厂模式 | Abstract Factory | 提供一个接口,创建一系列相关或相互依赖的对象,无需指定具体类 | 抽象接口 |
建造者模式 | Builder | 将复杂类的表示与构造分离,使相同构建过程能得出不同表示 | 类和构造分离 |
工厂方法模式 | Factory Method | 定义创建对象的接口,由子类决定实例化哪个类(延迟子类实例化) | 子类决定实例化 |
原型模式 | Prototype | 用原型实例指定创建对象的类型,并通过拷贝创建新对象 | 原型实例,拷贝 |
单例模式 | Singleton | 保证一个类仅有一个实例,并提供全局访问点 | 唯一实例 |
2. 结构型模式(Structural Patterns)
模式名称(中文) | 模式名称(英文) | 定义 | 记忆关键字 |
---|---|---|---|
适配器模式 | Adapter | 将一个类的接口转换成用户希望的另一种接口,使不兼容的接口协同工作 | 转换,兼容接口 |
桥接模式 | Bridge | 将抽象部分与实现部分分离,使它们能独立变化 | 抽象和实现分离 |
组合模式 | Composite | 将对象组合成树形结构表示“整体-部分”层次,用户可一致使用单个/组合对象 | 整体-部分,树形结构 |
装饰模式 | Decorator | 动态地给对象添加额外职责,比继承更灵活 | 附加职责 |
外观模式 | Facade | 为子系统提供统一的高层接口,简化使用 | 对外统一接口 |
享元模式 | Flyweight | 支持大量细粒度对象的共享 | 细粒度,共享 |
代理模式 | Proxy | 为其他对象提供代理以控制访问 | 代理控制 |
3. 行为型模式(Behavioral Patterns)
模式名称(中文) | 模式名称(英文) | 定义 | 记忆关键字 |
---|---|---|---|
职责链模式 | Chain of Responsibility | 通过链式传递请求,减少发送者与接收者耦合,直到有对象处理请求 | 职责链,传递请求 |
命令模式 | Command | 将请求封装为对象,支持参数化、队列、日志和撤销操作 | 日志记录,可撤销 |
解释器模式 | Interpreter | 定义语言的文法表示,并创建解释器来解释句子 | 解释器,虚拟机 |
迭代器模式 | Iterator | 提供顺序访问聚合对象元素的方法,无需暴露内部结构 | 顺序访问,不暴露内部 |
中介者模式 | Mediator | 封装对象间交互,降低耦合,使交互可独立变化 | 不直接引用 |
备忘录模式 | Memento | 在不破坏封装的前提下保存对象状态,后续可恢复 | 保存,恢复 |
观察者模式 | Observer | 定义一对多依赖关系,当对象状态变化时自动通知所有依赖对象 | 通知,自动更新 |
状态模式 | State | 允许对象在内部状态改变时改变行为 | 状态变成类 |
策略模式 | Strategy | 封装一系列算法,使其可互相替换,独立于用户变化 | 算法替换 |
模板方法模式 | Template Method | 定义算法骨架,将某些步骤延迟到子类实现 | 子类重定义步骤 |
访问者模式 | Visitor | 在不改变元素类的前提下定义作用于元素的新操作 | 数据和操作分离 |
真题示例:
设计模式描述了一个出现在特定设计语境中的设计再现问题,并为它的解决方案提供了一个经过充分验证的通用方案,不同的设计模式关注解决不同的问题。例如,抽象工厂模式提供一个接口,可以创建一系列相关或相互依赖的对象,而无需指定它们具体的类,它是一种(54)模式;(55)模式将类的抽象部分和它的实现部分分离出来,使它们可以独立变化,它属于(56)模式;(57)模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作。
(54)A.组合型 B.结构型 C.行为型 D.创建型
(55)A.Bridge B.Proxy C.Prototype D.Adapter
(56)A.组合型 B.结构型 C.行为型 D.创建型
(57)A.Command B.Facade C.Memento D.Visitor
- 创建型模式主要用于创建对象,抽象工厂模式提供一个接口来创建一系列相关或相互依赖的对象,属于创建型模式。创建型模式关注点在于对象的创建过程和方式,比如单例模式保证一个类仅有一个实例等。
- Bridge(桥接)模式将类的抽象部分和它的实现部分分离,使它们可以独立变化 。例如在图形绘制系统中,抽象的图形(如圆形、矩形等)和具体的绘制实现(如基于不同绘图库的绘制)可以分别进行扩展和修改。
- 桥接模式属于结构型模式。结构型模式主要用于处理类或对象的组合,研究如何将类或者对象结合在一起形成更大的结构,比如代理模式、组合模式等也都是结构型模式。
- Command(命令)模式将一个请求封装为一个对象,这样可以用不同的请求对客户进行参数化,还能将请求排队或记录请求日志,支持可撤销的操作。比如在文本编辑器中,“撤销”操作就可以用命令模式实现,将每次的编辑操作封装成命令对象。
欲开发一个绘图软件,要求使用不同的绘图程序绘制不同的图形,该绘图软件的扩展性要求将不断扩充新的图形和新的绘图程序,以绘制直线和图形为例,得到如下图所示的类图,该设计采用( )模式将抽象部分与其实现部分分离,使它们都可以独立的变化。其中( )定义了实现类接口,该模式适用于( )的情况,该模式属于( )模式。
A、适配器(adapter) B、装饰(Decorator) C、桥接(Bridge) D、组合(composite)
A、Shape B、Circle和Rectangle C、V1Drawing和V2Drawing D、Drawing
A、不希望在抽象和它的实现部分之间有一个固定判定关系
B、想表示对象的部分 - 整体层次结构.
C、想使用一个已经存在的类,而它的接口不符合要求
D、在不影响其他对象的情况下,以动态透明的方式给单个对象添加职责
A、创建型对象 B、结构型对象 C、行为型对象 D、结构型类
- 从类图中可以看出,Shape类代表图形的抽象部分,Drawing类及其子类(V1Drawing、V2Drawing)代表绘制的实现部分,通过将两者分离,使得图形和绘制方式都可以独立变化,符合桥接模式的特点。
- Drawing类中定义了tdrawLine()和tdrawCircle()等方法,为具体的绘制实现类(V1Drawing、V2Drawing)提供了接口规范,这些具体类需要实现这些方法来完成实际的绘制操作。
- 桥接模式适用于抽象和实现可以独立发展变化的场景,绘图软件中图形种类和绘图程序都可能不断扩充,即不希望图形抽象和绘制实现之间有固定的绑定关系。
- 桥接模式是结构型模式,它主要处理对象之间的结构关系,属于结构型对象模式,通过将对象的抽象和实现分离来构建灵活的软件结构。