当前位置: 首页 > article >正文

软考 系统架构设计师系列知识点之设计模式(4)

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

所属章节:

老版(第一版)教材

第7章. 设计模式

        第2节. 设计模式实例

3. 行为型模式

行为型模式可以影响一个系统的状态和行为流通过优化状态和行为流转换和修改的方式,可以简化、优化并且提高应用程序的可维护性。行为型模式包括:

  • Chain of Responsibility
  • Command
  • Interpreter
  • Iterator
  • Mediator
  • Memento
  • Observer
  • State
  • Strategy
  • Template Method
  • Visitor

(1)Chain of Responsibility(责任链)模式

Chain of Responsibility模式可以在系统中建立一个链,这样消息可以在首先接收到它的级别被处理,或者可以定位到可以处理它的对象

一句话概括:责任链模式为解除请求的发送者和接收者之间的耦合,而使多个对象都有机会处理这个请求。将这些对象连成一个链,并沿着这条链接传递该请求,直到有一个对象处理它

Chain of Responsibility模式的优点如下:

  • 降低了耦合度。
  • 增加向对象指定责任的灵活性。
  • 由于在一个类中产生的事件可以被发送到组成中的其它类处理器上,类的集合可以作为一个整体。

在以下情况中,应该使用Chain of Responsibility模式:

  • 多个对象可以处理一个请求,而其处理器却是未知的。
  • 想要在不指定确切的请求接收对象的情况下,向几个对象中的一个发送请求。
  • 可以动态地指定能够处理请求的对象集。

(2)Command(命令)模式

Command模式在对象中封装了请求,这样就可以保存命令,将该命令传递给方法以及像任何其它对象一样返回该命令

一句话概括:Command模式将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,将请求排队或记录请求日志,支持可撤销的操作

Command模式的优点如下:

  • 将调用操作的对象与知道如何完成该操作的对象相分离。
  • 更容易添加新命令,因为不用修改已有类。

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

  • 想要通过要执行的动作来参数化对象。
  • 要在不同的时间指定、排序以及执行请求。
  • 必须支持Undo、日志记录或事务。

(3)Interpreter(解释器)模式

Interpreter模式可以解释定义其语法表示的语言,还提供了用表示来解释语言中的语句的解释器

Interpreter模式的优点如下:

  • 容易修改并扩展语法。
  • 更容易实现语法。

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

  • 语言的语法比较简单。
  • 效率并不是最主要的问题。

(4)Iterator(迭代器)模式

Iterator模式为集合中的有序访问提供了一致的方法,而该集合是独立于基础集合、并与之相分离的。

Iterator模式的优点如下:

  • 支持集合的不同遍历。
  • 简化了集合的接口。

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

  • 在不开放集合对象内部表示的前提下,访问集合对象内容。
  • 支持集合对象的多重遍历。
  • 为遍历集合中的不同结构提供了统一的接口。

(5)Mediator(中介者)模式

Mediator模式通过引入一个能够管理对象间消息分布的对象,简化了系统中对象间的通信。该模式可以减少对象之间的相互引用,从而提高了对象间的共耦合度,并且它还可以独立地改变其间的交互。

一句话概括:中介者模式用一个中介对象封装一系列的对象交互。中介者使用各对象不需要显式的相互调用,从而使其耦合松散

Mediator模式的优点如下:

  • 去除对象间的影响。
  • 简化了对象间协议。
  • 集中化了控制。
  • 由于不再需要直接互传消息,单个组件变得更加简单,而且容易处理。
  • 由于不再需要包含逻辑来处理组件间的通信,组件变得更加通用。

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

  • 对象集合需要以一个定义规范但复杂的方式进行通信。
  • 想要在不使用子类的情况下自定义分布在几个对象之间的行为。

(6)Memento模式

Memento模式可以保持对象状态的“快照(snapshot)”,这样对象可以在不向外界公开其内容的情况下返回到它的最初状态

Memento模式的优点如下:

  • 保持封装的完整。
  • 简化了返回到初始状态所需的操作。

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

  • 必须保存对象状态的快照,这样以后就可以恢复状态。
  • 使用直接接口来获得状态可能会公开对象的细节,从而破坏对象的封装性。


http://www.kler.cn/news/107342.html

相关文章:

  • GoLong的学习之路(十四)语法之标准库 time(时间包)的使用
  • MySQL语言分类
  • 论文阅读 - Hidden messages: mapping nations’ media campaigns
  • Android原生项目集成uniMPSDK(Uniapp)遇到的报错总结
  • 在 macOS 上的多个 PHP 版本之间切换
  • 李沐——论文阅读——VIT(VIsionTransformer)
  • 使用Gateway解决跨域问题时配置文件不生效的情况之一
  • CTF-php特性绕过
  • 一次不接受官方建议导致的事故
  • 软考高项-计算题(3)
  • 【LeetCode】5. 最长回文子串
  • 10月28日,每日信息差
  • HarmonyOS开发:探索组件化模式开发
  • Flink CDC 2.0 主要是借鉴 DBLog 算法
  • PostgreSQL basebackup备份和恢复
  • 闲聊一下写技术博客的一些感想
  • Dijkstra算法基础详解,附有练习题
  • OpenAI大模型项目计划表(InsCode AI 创作助手)
  • Android Studio 查看Framework源码
  • 基于LCC的Buck谐振变换器研究
  • arcgis js api FeatureLayer加载时返回数据带*问题
  • 针对多分类问题,使用深度学习--Keras进行微调提升性能
  • MySQL数据库#6
  • Redis 主从复制和哨兵监控,实现Redis高可用配置
  • 革新技术,释放创意 :Luminar NeoforMac/win超强AI图像编辑器
  • 浅谈UI自动化测试
  • KDChart3.0编译过程-使用QT5.15及QT6.x编译
  • 深度学习——图像分类(CIFAR-10)
  • Centos系统使用yum安装Java jdk
  • OpenCV学习(一)——图像读取