《软件设计师》复习笔记(14.3)——设计模式

发布于:2025-04-19 ⋅ 阅读:(67) ⋅ 点赞:(0)

目录

一、设计模式分类

1. 创建型模式(Creational Patterns)

2. 结构型模式(Structural Patterns)

3. 行为型模式(Behavioral Patterns)

真题示例: 


一、设计模式分类

  1. 架构模式
    • 高层设计决策(如C/S结构)。
  2. 设计模式
    • 解决重复发生的问题,提供可复用的解决方案。
    • 四要素:模式名称、问题、解决方案、效果。
  3. 惯用法
    • 与编程语言相关的底层模式(如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)提供了接口规范,这些具体类需要实现这些方法来完成实际的绘制操作。
  • 桥接模式适用于抽象和实现可以独立发展变化的场景,绘图软件中图形种类和绘图程序都可能不断扩充,即不希望图形抽象和绘制实现之间有固定的绑定关系。
  • 桥接模式是结构型模式,它主要处理对象之间的结构关系,属于结构型对象模式,通过将对象的抽象和实现分离来构建灵活的软件结构。

网站公告

今日签到

点亮在社区的每一天
去签到