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

软考 系统架构设计师系列知识点之设计模式(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模式:

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

相关文章:

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

接前一篇文章:软考 系统架构设计师系列知识点之设计模式(3) 所属章节: 老版(第一版)教材 第7章. 设计模式 第2节. 设计模式实例 3. 行为型模式 行为型模式可以影响一个系统的状态和行为流。通过优化状态…...

PyCharm 安装 cx_Oracle 失败

我在PyCharm的终端用 pip安装cx_Oracle失败,报错情况如下: ERROR: Could not build wheels for cx_Oracle, which is required to install pyproject.toml-based projects 出错原因: python 的版本太高了,我的是3.11版本的&…...

解决Windows出现找不到mfcm90u.dll无法打开软件程序的方法

今天,我非常荣幸能够在这里与大家分享关于mfc90u.dll丢失的5种解决方法。在我们日常使用电脑的过程中,可能会遇到一些软件或系统错误,其中之一就是mfc90u.dll丢失。那么,mfc90u.dll究竟是什么文件呢?接下来&#xff0c…...

如何设计线程安全的 HashMap?

如何设计线程安全的 HashMap? HashMap 线程不安全的体现: 多线程下扩容死循环:JDK1.7中的 HashMap 使用头插法插入元素,在多线程的环境下,扩容的时候有可能导致环形链表的出现,形成死循环。因此,JDK1.8使…...

rpc汇总

1、什么是rpc rpc的应用,有哪些 Google 开源了 gRPC, Facebook 开源了 Thrift, Twitter 开源了 Finagle, 百度开源了bRPC, 腾讯开源了 Tars, 阿里开源了 Dubbo 和 HSF, 新浪开源了 Motan 等 gr…...

OpenCV学习(五)——图像基本操作(访问图像像素值、图像属性、感兴趣区域ROI和图像边框)

图像基本操作 5. 图像基本操作5.1 访问像素值并修改5.2 访问图像属性5.2 图像感兴趣区域ROI5.3 拆分和合并图像通道5.4 为图像设置边框(填充) 5. 图像基本操作 访问像素值并修改访问图像属性设置感兴趣区域(ROI)分割和合并图像 …...

指针仪表读数YOLOV8NANO

指针仪表读数YOLOV8 NANO 采用YOLOV8 NANO训练,标记,然后判断角度,得出角度,可以通过角度,换算成数据...

10000字!图解机器学习特征工程

文章目录 引言特征工程1.特征类型1.1 结构化 vs 非结构化数据1.2 定量 vs 定性数据 2.数据清洗2.1 数据对齐2.2 缺失值处理 原文链接:https://www.showmeai.tech/article-detail/208 作者:showmeAI 引言 上图为大家熟悉的机器学习建模流程图,…...

Java 官方提供了哪几种线程池,分别有什么特点?

JDK 中提供了 5 中不同线程池的创建方式: newCachedThreadPool newCachedThreadPool, 是一种可以缓存的线程池,它可以用来处理大量短期的突发流量。 它的特点有三个,最大线程数是 Integer.MaxValue,线程存活时间是 60 …...

DTI-ALPS处理笔记

DTI-ALPS处理笔记 前言: 前段时间刚好学习了一下DTI-ALPS处理(diffusion tensor image analysis along the perivascular space ),记录一下,以便后续学习。ALPS是2017年发表在《Japanese Journal of Radiology》的一篇文章首次提出的 (文章地址),主要用于无创评估脑内淋…...

LVS集群-NAT模式

集群的概念: 集群:nginx四层和七层动静分离 集群标准意义上的概念:为解决特定问题将多个计算机组合起来形成一个单系统 集群的目的就是为了解决系统的性能瓶颈。 垂直扩展:向上扩展,增加单个机器的性能,…...

微服务技术导学

文章目录 微服务结构认识微服务技术栈 微服务结构 技术: 解决异常定位: 持续集成,解决自动化的部署: 总结如下: 认识微服务 微服务演变: 技术栈 SpringCloud与SpringBoot版本对应关系...

p5.js 开发点彩画派的绘画工具

本文简介 点赞 关注 收藏 学会了 这几天在整理书柜时看到这套书,看到梵高,想起他的点彩画。 想到点彩画派,不得不提的一个画家叫乔治皮埃尔秀拉。据说梵高也模仿过他的画作。 我引用一下维基百科对点彩画派的解析: 点彩画派&…...

Java工具库——Commons IO的50个常用方法

工具库介绍 Commons IO(Apache Commons IO)是一个广泛用于 Java 开发的开源工具库,由Apache软件基金会维护和支持。这个库旨在简化文件和流操作,提供了各种实用工具类和方法,以便更轻松地进行输入输出操作。以下是 Com…...

Git: 仓库clone和用户配置

git clone 两种方式clone远程仓库到本地。 通过ssh 命令格式: git clone gitxxxxxx.git使用这种方法需要提前创建ssh秘钥。 首先打开一个git控制台,输入命令 ssh-keygen -t ed25519 -C “xxxxxxxxxx.com”输入命令后需要点击四次回车,其…...

构建外卖小程序:技术要点和实际代码

1. 前端开发 前端开发涉及用户界面设计和用户交互。HTML、CSS 和 JavaScript 是构建外卖小程序界面的主要技术。 <!-- HTML 结构示例 --> <header><h1>外卖小程序</h1><!-- 其他导航元素 --> </header> <main><!-- 菜单显示 -…...

ubuntu安装配置svn

目录 简介安装SVN 启动模式方式1:单库svnserve方式方式2:多库svnserve方式 SVN 创建版本库1.svn 服务配置文件 svnserve.conf2.用户名口令文件 passwd3.权限配置文件4.多库方式运行 SVN 检出操作SVN 解决冲突SVN 提交操作SVN 版本回退SVN 查看历史信息1.svn log2.svn diff3.svn…...

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程

『Jmeter入门万字长文』 | 从环境搭建、脚本设计、执行步骤到生成监控报告完整过程 1 Jmeter安装1.1 下载安装1.2 Jmeter汉化1.2.1 临时修改1.2.2 永久修改 1.3 验证环境 2 测试对象2.1 测试对象说明2.2 测试对象安装2.2.1 下载安装2.2.2 启动测试对象服务2.2.3 访问测试对象2.…...

Unity C#中LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查

LuaTable、LuaArrayTable、LuaDictTable中数据的增删改查 介绍Lua表lua表初始化lua移除引用lua中向表中添加数据lua中表中移除数据lua表中连接数据lua表中数据排序获取lua表长度获取表中最大值 UnityC#中LuaTableUnityC#中LuaArrayTable、LuaDictTable、LuaDictTable<K,V>…...

Spring常见面试题

https://blog.csdn.net/a745233700/article/details/80959716?ops_request_misc%257B%2522request%255Fid%2522%253A%2522169847982516800213061720%2522%252C%2522scm%2522%253A%252220140713.130102334…%2522%257D&request_id169847982516800213061720&biz_id0&…...

跨平台GPU计算新范式:开源硬件加速兼容方案全解析

跨平台GPU计算新范式&#xff1a;开源硬件加速兼容方案全解析 【免费下载链接】ZLUDA CUDA on non-NVIDIA GPUs 项目地址: https://gitcode.com/GitHub_Trending/zl/ZLUDA 在算力需求激增的今天&#xff0c;跨平台GPU计算成为打破硬件壁垒的关键&#xff0c;而开源硬件加…...

5大突破!城通网盘直连解析工具让下载效率翻倍

5大突破&#xff01;城通网盘直连解析工具让下载效率翻倍 【免费下载链接】ctfileGet 获取城通网盘一次性直连地址 项目地址: https://gitcode.com/gh_mirrors/ct/ctfileGet 你是否经历过这样的窘境&#xff1a;急需下载的资料被城通网盘的限速墙挡在门外&#xff0c;看…...

CLIP ViT-H-14性能实测报告:不同batch size下GPU利用率与吞吐量关系

CLIP ViT-H-14性能实测报告&#xff1a;不同batch size下GPU利用率与吞吐量关系 1. 测试背景与目的 CLIP ViT-H-14作为当前最先进的视觉语言模型之一&#xff0c;在图像特征提取领域展现出卓越性能。本次测试聚焦于实际部署场景中的关键性能指标&#xff0c;旨在为工程团队提…...

XHS-Downloader:3分钟快速上手!小红书无水印下载神器全攻略

XHS-Downloader&#xff1a;3分钟快速上手&#xff01;小红书无水印下载神器全攻略 【免费下载链接】XHS-Downloader 小红书&#xff08;XiaoHongShu、RedNote&#xff09;链接提取/作品采集工具&#xff1a;提取账号发布、收藏、点赞、专辑作品链接&#xff1b;提取搜索结果作…...

Qwen2.5-14B-Instruct实战部署:像素剧本圣殿与Jira集成的剧本任务管理方案

Qwen2.5-14B-Instruct实战部署&#xff1a;像素剧本圣殿与Jira集成的剧本任务管理方案 1. 项目概述 像素剧本圣殿&#xff08;Pixel Script Temple&#xff09;是一款基于Qwen2.5-14B-Instruct深度微调的专业剧本创作工具。这个创新性解决方案将先进的大语言模型能力与复古像…...

SecGPT-14B保姆级教程:开源网络安全大模型GPU高效部署全流程

SecGPT-14B保姆级教程&#xff1a;开源网络安全大模型GPU高效部署全流程 1. 开篇&#xff1a;为什么你需要一个“懂安全”的AI助手&#xff1f; 想象一下&#xff0c;你正在分析一个复杂的网络攻击日志&#xff0c;面对海量的告警和模糊的线索&#xff0c;感觉像在大海里捞针…...

Qwen3-0.6B-FP8效果展示:中文方言理解(粤语/川普)与转写准确性测试

Qwen3-0.6B-FP8效果展示&#xff1a;中文方言理解&#xff08;粤语/川普&#xff09;与转写准确性测试 1. 引言&#xff1a;当大模型遇上“家乡话” 想象一下&#xff0c;你对着一个AI助手说&#xff1a;“今朝天气几好&#xff0c;不如去饮茶啦&#xff1f;” 或者 “你娃儿…...

I.MX6ULL GPIO配置避坑指南:HYS、PUS、DSE这些寄存器位到底怎么设?

I.MX6ULL GPIO配置实战手册&#xff1a;寄存器位场景化解析与避坑策略 如果你正在使用I.MX6ULL开发嵌入式系统&#xff0c;GPIO配置可能是你遇到的第一个"拦路虎"。与常见的STM32不同&#xff0c;I.MX6ULL的GPIO配置寄存器充满了各种缩写——HYS、PUS、PUE、PKE、ODE…...

OpenClaw会议小助手:Qwen3.5-9B实时转录与待办项提取

OpenClaw会议小助手&#xff1a;Qwen3.5-9B实时转录与待办项提取 1. 为什么需要会议自动化助手 作为经常参加跨时区会议的技术从业者&#xff0c;我长期被两个问题困扰&#xff1a;一是会议录音整理耗时耗力&#xff0c;二是行动项经常在后续执行中被遗漏。传统解决方案要么需…...

OpenClaw云端调试技巧:SSH连接星图平台Qwen3-4B镜像实例

OpenClaw云端调试技巧&#xff1a;SSH连接星图平台Qwen3-4B镜像实例 1. 为什么需要云端调试OpenClaw&#xff1f; 上周我在星图平台部署了Qwen3-4B镜像实例&#xff0c;准备用它作为OpenClaw的后端大脑。本以为本地调试和云端调试差不多&#xff0c;结果第一天就遇到了大麻烦…...