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

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

所属章节:

老版(第一版)教材

第7章. 设计模式

        第2节. 设计模式实例

3. 行为型模式

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

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

(7)Observer模式

Observer模式为组件向相关接收方广播消息提供了灵活的方法该模式定义了对象间一到多的依赖关系,这样当对象改变状态时,将自动通知并更新它所有的依赖对象

Observer模式的优点如下:

  • 抽象了主体与Observer之间的耦合关系。
  • 支持广播方式的通信。

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

  • 对一个对象的修改涉及对其它对象的修改,而且不知道有多少对象需要进行相应修改。
  • 对象应该能够在不用假设对象标识的前提下通知其它对象。

(8)State模式

State模式允许对象在内部状态变化时,变更其行为,并且修改其类

State模式的优点如下:

  • 定位指定状态的行为,并且针对不同状态来划分行为,使状态转换显式进行。

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

  • 对象的行为依赖于其状态,并且该对象必须在运行时根据其状态修改其行为。
  • 操作具有大量以及多部分组成的取决于对象状态的条件语句。

(9)Strategy模式

Strategy模式定义了一组能够用来表示可能行为集合的类。这些行为可以在应用程序中使用,来修改应用程序功能。

Strategy模式的优点如下:

  • 另一种子类化方法。
  • 在类自身中定义了每一个行为,这样就减少了条件语句。
  • 更容易扩展模型。在不对应用程序进行代码修改的情况下,该模式具有新的行为。

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

  • 许多相关类只是在行为方面有所区别。
  • 需要算法的不同变体。
  • 算法使用客户端未知的数据。

(10)Template Method模式

Template Method模式提供了在不重写方法的前提下,允许子类重载部分方法的方法。在操作中定义算法的框架,将一些步骤由子类实现。该模式可以在不修改算法结构的情况下,让子类重新定义算法的特定步骤。

Template Method模式的优点如下:

  • 代码重用的技术基础。

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

  • 想要依次实现算法的不变部分,而使用子类实现算法的可变行为。
  • 当子类间的通用行为需要分解、定位到通用类的时候,这样可以避免代码重复的问题。

(11)Visitor模式

Visitor模式提供了一种方便的、可维护的方法来表示在对象结构元素上要进行的操作。该模式允许在不改变操作元素的类的前提下定义一个新操作。

Visitor模式的优点如下:

  • 更容易添加新操作。
  • 集中相关操作并且排除不相关操作。

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

  • 对象结构包含许多具有不同接口的对象类,并且想要对这些依赖于具体类的对象进行操作。
  • 定义对象结构的类很少被修改,但想要在此结构之上定义新的操作。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/118869.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

Go 语言访问 Redis 笔记

文章目录 Mac 下载 RedisMac Redix 数据库打开服务端客户端 导包连接数据库操作字符串操作 Hash设置过期时间队列操作连接池并发操作管道化操作事务操作 Mac 下载 Redis Mac安装Redis,原来就是这么简单 Mac Redix 数据库打开 brew services start redis 服务端 …

SiteGround主机最新购买使用指南及外贸建站教程

SiteGround是一家知名的虚拟主机服务提供商,它在过去几年中在WordPress和WooCommerce建站领域取得了显著的发展和改进。SiteGround致力于为用户提供专门针对WordPress优化的虚拟主机,并将WordPress深度集成到其主机服务中,使外贸建站过程变得…

司徒理财:10.26周四黄金走势分析,黄金操作策略,谨慎追多

黄金走势分析:      黄金依旧是震荡走势不变,昨日给的文章策略可谓神准!亚欧盘现价1970提示做多,美盘1987提示做空,一来一回,又是大肉!震荡走势,高抛低吸,最忌追涨杀…

gstreamer插件开发-What are states?

## What are states?状态描述元素实例是否初始化、是否准备好传输数据以及当前是否正在处理数据。在GStreamer中定义了四种状态: > - GST_STATE_NULL> - GST_STATE_READY> - GST_STATE_PAUSED> - GST_STATE_PLAYING 从现在开始,它们将被简单地称为“NU…

GPT的前世今生:从gpt1到chatgpt的能力提升

从2017年google brain提出transformer模型,到2018年基于transformer模型open ai推出了gpt1模型以及google推出了bert模型,到2019-2021年open ai陆续推出gpt2和gpt3,再到2022-2023年推出chat-gpt和gpt4,大语言模型已经发展成了一个…

遥感语义分割、变化检测论文小trick合集(持续更新)

目录 💗💗1.影像融合机制 💗💗2.上下文聚合模块 💗💗3.adapter即插即用模块 💗💗1.影像融合机制 参考【多源特征自适应融合网络的高分遥感影像语义分割】文章中的“多源特征自适应…

【软考】数据库篇:并发控制-数据不一致问题

简介 本文介绍软考数据库篇,关于事务的考核内容。软考在数据库事务篇的考察,几乎都是出选择题类题目,不过在数据库系统工程师的内容里,会在下午提以一个小题出现,可见还是比较重要的知识点。 考纲内容 考核并发控制…

快速排序(c语言代码实现)

交换排序:快速排序(不稳定的排序) 快速排序(Quick Sort)是一种常见的排序算法,它采用分治法的思想,对待排序序列进行划分,使得划分出的子序列可以分别进行排序,最终使整…

买卖股票的最佳时机 II

给你一个整数数组 prices ,其中 prices[i] 表示某支股票第 i 天的价格。在每一天,你可以决定是否购买和/或出售股票。你在任何时候 最多 只能持有一股 股票。你也可以先购买,然后在 同一天 出售。返回 你能获得的 最大 利润 。 示例 1&#…

淘宝商品链接获取淘宝商品评论数据(用 Python实现淘宝商品评论信息抓取)

在网页抓取方面,可以使用 Python、Java 等编程语言编写程序,通过模拟 HTTP 请求,获取淘宝多网站上的商品详情页面评论内容。在数据提取方面,可以使用正则表达式、XPath 等方式从 HTML 代码中提取出有用的信息。值得注意的是&#…

Docker 镜像常用命令总结

目录 1. Docker镜像相关命令(重点掌握) 1.1 docker pull 镜像名称 [:tag] 拉取镜像 1.2 docker search 镜向名称 (查询某个镜像) 1.3 docker images 列出当前主机上所有镜像 1.4 docker rmi 镜像ID 删除镜像 1.5 docker system df 查看所有镜像容器所占空间 2. Docker …

JMeter + Ant + Jenkins持续集成-接口自动化测试

需要安装的工具: jdk1.8jmeter3.2ant1.9jenkins2.1 1、Jdkwin7系统如何安装jdk及环境变量的配置-百度经验 安装包安装设置环境变量验证是否安装正确 Java -version检查,如下就代表安装成功了,环境变量设置就去搜索了,网上很多…

RabbitMQ中方法channel.basicAck的使用说明

方法channel.basicAck的作用 在RabbitMQ中,channel.basicAck方法用于确认已经接收并处理了消息。 方法的参数说明 public void basicAck(long deliveryTag,boolean multiple) 参数: long deliveryTag 消息的唯一标识。每条消息都有自己的ID号&#x…

牛客网刷题-(4)

🌈write in front🌈 🧸大家好,我是Aileen🧸.希望你看完之后,能对你有所帮助,不足请指正!共同学习交流. 🆔本文由Aileen_0v0🧸 原创 CSDN首发🐒 如…

prosemirror 学习记录(四)decoration

使用 decorations 使用 props - decorations() 添加 decorations 写一个简单的插件:高亮所有 apple 节点 export const MyHighlightApplesPlugin new Plugin({props: {// view 每次变化都会执行 decorations 方法decorations(state) {let arrs [];state.doc.de…

QT项目如何打包成可执行文件

QT项目打包成可执行文件 一 建立一个文件夹二. 编译2.1 打开QT MSVC编译工具2.2 进入publish文件夹 一 建立一个文件夹 例如:publish 二. 编译 2.1 打开QT MSVC编译工具 2.2 进入publish文件夹 cd 路径 执行命令 windeployqt 项目名 例:windeployq…

C/C++实现的MD5哈希校验

C/C实现的MD5哈希校验 网上找到的不知道哪位博主的代码,搜集使用,侵权删。 #ifndef MD5_H #define MD5_H#ifdef __cplusplus extern "C" { #endiftypedef struct {unsigned int count[2];unsigned int state[4];unsigned char buffer[64]; } …

vue3学习心得

1、组件v-model 与其说 组件v-model&#xff0c;倒不如说&#xff0c;父子组件通讯的双向邦定&#xff0c;我倒喜欢这样子去理解。就好比&#xff0c;我在子组件内有一个input框&#xff0c;然后&#xff0c;这个框的值会跟父组件定的属性一起变化。 <!--子组件 AttCompone…

美海军用于情报、监视和侦察的中大型无人系统概述

源自&#xff1a;中国指挥与控制学会 “人工智能技术与咨询” 发布 简 介 1 引 言 2 超大型无人潜航器 图1 波音“回声航行者”无人潜航器 图2 “虎鲸”超大型无人潜航器 3 中型无人水面舰艇 图3 “海鹰”无人水面舰艇 图4 “海上猎人”无人水面舰艇 4 …

SpringMVC 资源状态转移RESTful

文章目录 1、RESTful简介a>资源b>资源的表述c>状态转移 2、RESTful的实现HiddenHttpMethodFilterRESTful案例 1、RESTful简介 REST&#xff1a;Representational State Transfer&#xff0c;表现层资源状态转移。 a>资源 资源是一种看待服务器的方式&#xff0c…