【软考】设计模式之中介者模式

news2025/2/22 13:36:57

目录

          • 1. 说明
          • 2. 应用场景
          • 3. 结构图
          • 4. 构成
          • 5. 适用性
          • 6. 优点

1. 说明
  • 1.用一个中介对象来封装一系列的对象交互。
  • 2.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
  • 3.中介者模式(Mediator Pattern)是一种行为设计模式,主要用于降低系统中对象之间的耦合度,提高系统的灵活性和可维护性。
  • 4.中介者模式定义了一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。
  • 5.在中介者模式中,各个对象不再直接相互引用和通信,而是通过中介者来进行间接通信。
2. 应用场景
  • 1.系统中存在多个对象之间复杂的交互关系时,可以使用中介者模式来简化这些交互。
  • 2.当系统中的对象之间需要解耦,减少直接依赖时,可以使用中介者模式。
  • 3.当系统中的对象交互关系需要独立于各个对象的实现而变化时,可以使用中介者模式。
3. 结构图

在这里插入图片描述

4. 构成
  • 1.抽象中介者(Mediator):定义一个接口,该接口用于定义各同事(Colleague)对象之间进行通信需要的方法。
  • 2.具体中介者(ConcreteMediator):实现抽象中介者接口,通过协调各个同事对象来实现协作行为,了解并维护它的各个同事,它维持了对各个同事对象的引用。
  • 3.抽象同事类(Colleague):定义各个同事类公有的方法,并声明了一些抽象方法来供子类实现,同时它维持了一个对抽象中介者类的引用,其子类可以通过该引用来与中介者通信。
  • 4.具体同事类(ConcreteColleague):实现抽象同事类,每一个同事对象在需要和其他同事对象通信时,先与中介者通信,通过中介者来间接完成与其他同事类的通信。
5. 适用性
  • 1.一组对象以定义良好但是复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解。
  • 2.一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。
  • 3.想定制一个分布在多个类中的行为,而又不想生成太多的子类。
6. 优点
  • 1.降低耦合度:通过引入中介者对象,各个对象之间的直接依赖关系被减少,使得系统结构更加灵活和可扩展。
  • 2.简化交互:中介者模式将对象之间的多对多交互关系转换为中介者与各个对象之间的一对多关系,简化了对象之间的交互逻辑。
  • 3.易于维护和扩展:由于对象之间的交互被集中到中介者对象中,因此当需要修改或扩展对象之间的交互时,只需修改中介者对象,而不需要修改各个对象的代码。

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

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

相关文章

Qt-自定义控件鼠标事件键盘事件定时器绘图

1. 自定义控件 1.1 创建自定义控件 1.在项目目录上右键, 选择 "Add New" 2.选择 "Qt" --> "Qt 设计师界面类" 3.根据需求选择模板,此处选择空窗口 4.设置类名 和 相关文件名 使用设计师界面类会产生三个文件&…

媒界:插混VS增程:魏牌蓝山用天花板Hi4诠释都市家庭用车最优解

在新能源混动领域,关于插混、增程谁才是混动最优解,一直业内争论的焦点。正如路遥知马力、日久见人心。对于新能源动力系统的评判标准来说,最好的答案就是路上见。 近日,一位媒体博主驾驶着魏牌全新蓝山从阿拉善到武汉往返狂飙30…

Python面向对象编程:封装和私有属性④

文章目录 1. 引言2. 什么是封装?3. 公有属性和方法4. 私有属性和方法5. 属性访问器(Getters 和 Setters)6. 使用 property 函数7. 综合示例7.1 项目结构7.2 模块代码__init__.pystudent.pycourse.pymanager.py 7.3 主程序代码main.py 7.4 运行…

cmake模板-支持编译动态/静态文件

代码链接:代码仓库 git clone https://gitee.com/etsuyou/cmake-template.git模板 模板截图 如何使用 在src和inc中写代码 此处用我默认提供的代码 ./go.sh cmake 生成Makefile ./go.sh make 生成bin文件和.a以及.so ./go.sh run app 运行 ./go.sh clean 以…

Tomcat服务部署及优化

一、Tomcat的基本介绍 1. tomcat是什么? Tomcat服务器是一个免费的开放源代码的Web应用服务器,属于轻量级应用服务器,在中小型系统和并发访问用户不是很多的场合下被普遍使用,是开发和调试JSP程序的首选。一般来说,T…

QT QML 练习8-Simple Transformations

简单的转换(Simple Transformations) 转换操作改变了一个对象的几何状态。QML元素对象通常能够被平移,旋转,缩放。下面我们将讲解这些简单的操作和一些更高级的用法。 我们先从一个简单的转换开始。用下面的场景作为我们学习的开始…

Python学习100天第9天之面向对象进阶

1 前言 在前面的章节我们已经了解了面向对象的入门知识,知道了如何定义类,如何创建对象以及如何给对象发消息。为了能够更好的使用面向对象编程思想进行程序开发,我们还需要对Python中的面向对象编程进行更为深入的了解。 2 property装饰器…

AVLTree 旋转笔记(根据平衡因子插入的公式,贼好理解)

平衡因子 avltree是一棵每个节点的左右子树的高度差不超过1的二叉树搜索树,对于avltree最重要的就是对平衡因子的控制。 对于旋转我们重点要注意的是三个节点,以左旋举例,需要注意的就是parent,subr,subrl。而旋转的方…

MYSQL架构、执行过程和顺序

MYSQL架构、执行过程和顺序 一、前言 1.1、说明 就MySQL的架构,以及执行过程、sql执行顺序,以及一些相关学习分享内容。 在参考文章的基础上,会增加自己的理解、看法,希望本文章能够在您的学习中提供帮助。 如有错误的地方&a…

Dokcer如何容器部署及常见问题

本文讲解通过Docker部署Jenkins过程及遇到的问题。 通过 Docker 部署 Jenkins 使用 Docker 来部署 Jenkins 是一个快速且高效的方式。以下是使用 Docker 部署 Jenkins 的分步骤指南: 1. 安装 Docker 如果你的系统上还没有安装 Docker,请根据操作系统…

春日技术问答:Spring Boot课程答疑

3系统分析 3.1可行性分析 通过对本课程答疑系统实行的目的初步调查和分析,提出可行性方案并对其一一进行论证。我们在这里主要从技术可行性、经济可行性、操作可行性等方面进行分析。 3.1.1技术可行性 本课程答疑系统采用JAVA作为开发语言,Spring Boot框…

【2D/3D-Lidar-SLAM】 Cartographer详细解读

【2D/3D-Lidar-SLAM】 Cartographer详细解读 1. 摘要 2. Cartographer系统数据处理流程2.1. 数据获取(Input Sensor Data)2.2 姿态外推器(PoseExtrapolator)2.3 局部建图(Local SLAM) 3. 关键模块实现 3.1 …

5、springboot-基础入门

1、系统要求 Java 8 & 兼容java14 .Maven 3.3idea 2019.1.2 1.1、maven设置 修改maven的settings.xml文件中的镜像&#xff0c;如下 <mirrors><mirror><id>nexus-aliyun</id><mirrorOf>central</mirrorOf><name>Nexus aliyu…

vue3 在store的index.js

导入vuex&#xff0c;在store的index.js创建store对象 在main.js挂载store import store from ./storenew Vue ({/* 将store对象实例挂载到vue实例中 所有组件就可以直接从store中获取全局数据了*/ store, render: h > h(App) }).$mount(#app) 在store中的index.js进行声明…

【IPv6】IPv6 NAT66介绍

参考链接 IPv6-to-IPv6 Network Address Translation (NAT66) (ietf.org)https://datatracker.ietf.org/doc/id/draft-mrw-nat66-00.html IPv6 NAT66 NAT66&#xff0c;全称为Network Address Translation for IPv6 to IPv6&#xff0c;是一种用于IPv6网络的地址转换技术。在…

FPGA基于SRIO Auraro 三速以太网 IIC SPI等多协议的高速传输处理项目

高速传输处理项目 此项目涉及较多协议和接口&#xff0c;有较复杂的系统顶层框图设计。在涉及设备较多的应用场景中&#xff0c;需要涉及一款PCI-E板卡&#xff0c;将多个子系统的数据汇总上传到PC或服务器上。在此项目中有3路数据源&#xff0c;分别是:srio数据&#xff0c; …

数据结构与算法:动态规划的深度探讨

目录 12.1 动态规划的核心思想 12.2 经典动态规划问题 12.3 动态规划在图中的应用 12.4 高级动态规划技术 总结 数据结构与算法&#xff1a;动态规划的深度探讨 动态规划&#xff08;Dynamic Programming, DP&#xff09;是一种解决复杂问题的有效方法&#xff0c;特别适…

Nuxt3部署-Ubuntu系统(Node 服务 + pm2 + Nginx 反向代理)

Nuxt3部署-Ubuntu系统&#xff08;Node 服务 pm2 Nginx 反向代理&#xff09; 文章目录 Nuxt3部署-Ubuntu系统&#xff08;Node 服务 pm2 Nginx 反向代理&#xff09;一、安装 Nodejs 环境二、安装 Nginx三、安装 pm2四、本地项目打包1️⃣&#xff1a;打包2️⃣&#xff1…

【截流软件】采集短视频关键词笔记下的筛选评论

用python开发的dy采集工具【爬抖Y搜索评论软件】&#xff0c;可用于引流截流等。 支持2种模式的评论采集&#xff1a; 根据关键词采集评论&#xff0c;爬取思路&#xff1a;作品关键词->作品链接->评论根据作品链接采集评论&#xff0c;爬取思路&#xff1a;作品链接-&g…

aws(学习笔记第六课) AWS的虚拟私有,共有子网以及ACL,定义公网碉堡主机子网以及varnish反向代理

aws(学习笔记第六课) AWS的虚拟私有&#xff0c;共有子网以及ACL&#xff0c;定义公网碉堡主机子网以及varnish反向代理 学习内容&#xff1a; AWS的虚拟私有&#xff0c;共有子网以及ACL定义公网碉堡主机子网&#xff0c;私有子网和共有子网以及varnish反向代理 1. AWS的虚拟…