设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
系列文章目录
设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列
设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点
设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用场景和优缺点。
设计模式之模板方法模式,通俗易懂快速理解,以及模板方法模式的使用场景
设计模式之-建造者模式通俗易懂理解,以及建造者模式的使用场景和示列代码
设计模式之-代理模式,快速掌握理解代理模式,以及代理模式的使用场景
设计模式之-原型模式,快速掌握原型模式,通俗易懂的理解原型模式以及使用场景
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
设计模式之-责任链模式,快速掌握责任链模式,通俗易懂的讲解责任链模式以及它的使用场景
设计模式之-装饰模式,快速掌握装饰模式,通俗易懂的讲解装饰模式以及它的使用场景
设计模式之-适配器模式,快速掌握适配器模式,通俗易懂的讲解适配器模式以及它的使用场景
文章目录
- 系列文章目录
- 一、快速理解中介者模式
- 二、使用场景
- 三、示例代码
一、快速理解中介者模式
中介者模式是一种行为型设计模式,它允许多个对象之间通过一个中介者对象进行通信和协作。中介者模式将对象之间的交互行为集中在一个中介者对象中,降低了对象之间的耦合度,使其更易于理解和维护。
在现实生活中,中介者模式的例子可以是机场的塔台。塔台(中介者对象)负责协调不同飞机(对象)之间的起飞和降落,飞机之间无需直接相互通信,而是通过塔台进行交流。
二、使用场景
使用中介者模式的主要场景包括:
- 当一组对象之间的通信产生复杂的依赖关系时,可以使用中介者模式将其简化。中介者对象负责管理对象之间的通信,避免了对象之间的直接耦合。
- 当一组对象之间的交互行为需要进行集中控制时,可以使用中介者模式。中介者对象可以维护和管理对象之间的关系,并根据需要调整对象之间的交互行为。
三、示例代码
下面是一个通俗易懂的中介者模式示例代码,以聊天室为场景:
// 抽象中介者:聊天室
interface ChatRoom {void sendMessage(String message, User user);
}// 具体中介者:具体聊天室
class ConcreteChatRoom implements ChatRoom {@Overridepublic void sendMessage(String message, User user) {System.out.println(user.getName() + " 发送消息:" + message);}
}// 抽象同事类:用户
abstract class User {protected String name;protected ChatRoom chatRoom;public User(String name, ChatRoom chatRoom) {this.name = name;this.chatRoom = chatRoom;}public String getName() {return name;}public abstract void sendMessage(String message);
}// 具体同事类:普通用户
class OrdinaryUser extends User {public OrdinaryUser(String name, ChatRoom chatRoom) {super(name, chatRoom);}@Overridepublic void sendMessage(String message) {chatRoom.sendMessage(message, this);}
}// 具体同事类:VIP用户
class VipUser extends User {public VipUser(String name, ChatRoom chatRoom) {super(name, chatRoom);}@Overridepublic void sendMessage(String message) {chatRoom.sendMessage(message, this);}
}// 客户端代码
public class Main {public static void main(String[] args) {ChatRoom chatRoom = new ConcreteChatRoom();User user1 = new OrdinaryUser("Tom", chatRoom);User user2 = new OrdinaryUser("Jerry", chatRoom);User user3 = new VipUser("Alice", chatRoom);user1.sendMessage("Hello everyone!");user2.sendMessage("Hi Tom!");user3.sendMessage("Nice to meet you all.");}
}
在上面的示例中,ChatRoom是抽象中介者接口,定义了用户发送消息的方法。ConcreteChatRoom是具体中介者类,实现了抽象中介者接口,并在sendMessage方法中处理用户发送的消息。
User是抽象同事类,定义了用户的名称和中介者对象。OrdinaryUser和VipUser是具体同事类,分别实现了抽象同事类的发送消息方法,并在其中调用中介者对象的方法。
在客户端代码中,首先创建了一个具体中介者对象chatRoom。然后创建了多个具体同事对象,包括普通用户和VIP用户。最后,每个用户通过调用发送消息方法向聊天室发送消息。
通过使用中介者模式,可以将对象之间的通信行为集中在一个中介者对象中,减少了对象之间的直接依赖和耦合。中介者模式提供了一种简化复杂交互的方式,使对象之间的通信更加简单和可控。
相关文章:
设计模式之-中介者模式,快速掌握中介者模式,通俗易懂的讲解中介者模式以及它的使用场景
系列文章目录 设计模式之-6大设计原则简单易懂的理解以及它们的适用场景和代码示列 设计模式之-单列设计模式,5种单例设计模式使用场景以及它们的优缺点 设计模式之-3种常见的工厂模式简单工厂模式、工厂方法模式和抽象工厂模式,每一种模式的概念、使用…...
12.25
led.c #include "led.h" void all_led_init() {RCC_GPIO | (0X3<<4);//时钟使能GPIOE_MODER &(~(0X3<<20));//设置PE10输出GPIOE_MODER | (0X1<<20);//设置PE10为推挽输出GPIOE_OTYPER &(~(0x1<<10));//PE10为低速输出GPIOE_OSPEED…...
MySQL5.7的几种安装方式总结(排错踩坑呕心沥血的经历)
包安装 添加国内源:mysql | 镜像站使用帮助 | 清华大学开源软件镜像站 | Tsinghua Open Source Mirror 注意:5.7安装之后有一个临时密码,进行登录并修改新密码后才可以对mysql进行操作。 可以yun list看看各个系统光盘自带的都是什么版本&…...
zookeeper基本使用
目录 环境搭建 单机版搭建 集群版搭建 基本语法使用 可视化客户端 数据结构 节点分类 1. 持久节点 2. 临时节点 3. 有序节点 4. 容器节点 5. TTL节点 节点状态 监听机制 watch监听 永久性watch 应用场景 1. 实现分布式锁 2. 乐观锁更新数据 应用场景总结 选…...
【华为机试】2023年真题B卷(python)-分月饼
一、题目 题目描述: 中秋节公司分月饼,m个员工,买了n个月饼,m<n,每个员工至少分1个月饼,但可以分多个,单人份到最多月饼的个数为Max1,单人分到第二多月饼的个数是Max2,…...
EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析
EtherCAT主站SOEM -- 11 -- EtherCAT从站 XML 文件解析 1 EtherCAT 从站信息规范1.1 XML 文件说明1.1.1 XML 数据类型1.1.2 EtherCATInfo1.1.3 Groups1.1.4 Devices1.1.5 Modules1.1.6 Types1.1.6.1 AccessType 的组成1.1.6.2 ArraylnfoType 的组成1.1.6.3 DeviceType 的组成1.…...
YOLOv5算法改进(23)— 更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv
前言:Hello大家好,我是小哥谈。本节课就让我们结合论文来对YOLOv5进行组合改进(更换主干网络GhostNet + 添加CA注意力机制 + 引入GhostConv),希望同学们学完本节课可以有所启迪,并且后期可以自行进行YOLOv5算法的改进!🌈 前期回顾: YOLOv5算法改进(1)— 如何去…...
centos系统部署rancher1.6版本并部署服务
1. centos上部署docker. 请参考 博客 2. 用docker安装rancher1.6 sudo docker run -d -v /mnt/rancher/db:/var/lib/mysql --restartunless-stopped -p 8080:8080 rancher/server3.浏览器登录做设置 3.1 浏览器打开 1.117.92.32:8080 #直接就登录了 3.2 第一次进入&am…...
Matlab实时读取串口数据并实时画图方法
** Matlab实时读取串口数据并实时画图方法 ** 按照数据串口协议如:$KT2,1.80,88.18,39.54,42.86,LO[0.72,-1.04,0.35],举例。 s serialport("COM12",115200,"Timeout",5); poszeros(100000,3); j1; data1 read(s,1,"uint8&…...
智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于向量加权平均算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.向量加权平均算法4.实验参数设定…...
SpringBoot - Maven 打包合并一个胖 JAR 以及主项目 JAR 依赖 JAR 分离打包解决方案
问题描述 <plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.1.18.RELEASE</version><configuration><!--<classifier>exec</classifier>--…...
react 18 Hooks扩展函数式组件的状态管理
React函数式组件 特点 React函数式组件具有以下特点: 简洁:使用函数的方式定义组件,语法简单直观。无状态:函数式组件没有内部状态(state),只依赖于传入的props。可复用:函数式组…...
智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码
智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码 文章目录 智能优化算法应用:基于浣熊算法3D无线传感器网络(WSN)覆盖优化 - 附代码1.无线传感网络节点模型2.覆盖数学模型及分析3.浣熊算法4.实验参数设定5.算法结果6.参考文献7.MA…...
c++ qt QtWidgetsApplication 项目 使用外部ui
1 包含生成的UI头文件: 例如,如果你的Qt Designer的.ui文件名为test.ui,那么生成的头文件通常为ui_test.h。 #include "ui_test.h"2 实例化UI类:.h文件中实例化ui 在你的主要类的头文件中,你通常会声明一个U…...
使用React 18、Echarts和MUI实现温度计
关键词 React 18 Echarts和MUI 前言 在本文中,我们将结合使用React 18、Echarts和MUI(Material-UI)库,展示如何实现一个交互性的温度计。我们将使用Echarts绘制温度计的外观,并使用MUI创建一个漂亮的用户界面。 本文…...
使用代码生成工具快速开发应用-结合后端Web API提供接口和前端页面快速生成,实现通用的业务编码规则管理
1、通用的业务编码规则的管理功能 在前面随笔我们介绍了一个通用的业务编码规则的管理功能,通过代码生成工具Database2Sharp一步步的生成相关的后端和Winform、WPF的界面,进行了整合,通过利用代码生成工具Database2sharp生成节省了常规功能的…...
Android 13 - Media框架(26)- OMXNodeInstance(三)
上一节我们了解了OMXNodeInstance中的端口定义,这一节我们一起来学习ACodec、OMXNode、OMX 组件使用的 buffer 到底是怎么分配出来的,以及如何关联起来的。(我们只会去了解 graphic buffer的创建、input bytebuffer的创建、secure buffer的创…...
力扣题目学习笔记(OC + Swift)21. 合并两个有序链表
21. 合并两个有序链表 将两个升序链表合并为一个新的 升序 链表并返回。新链表是通过拼接给定的两个链表的所有节点组成的。 链表解题经典三把斧: 哑巴节点栈快慢指针 此题比较容易想到的解法是迭代法,生成哑巴节点,然后迭代生成后续节点。…...
C# WPF上位机开发(windows pad上的应用)
【 声明:版权所有,欢迎转载,请勿用于商业用途。 联系信箱:feixiaoxing 163.com】 大部分同学可能都认为c# wpf只能用在pc端。其实这是一种误解。c# wpf固然暂时只能运行在windows平台上面,但是windows平台不仅仅是电脑…...
Word使用技巧【开题报告】
1、修改目录:选中目录,点击更新域。 2、更改或删除单个页面上的页眉或页脚 3、借助其他软件在Word导入参考文献 利用zetero导入文献:安装zetero 解决参考文献插入问题 在Word中插入文献操作步骤 英文文献出现“等”,如何解决 Zote…...
调用支付宝接口响应40004 SYSTEM_ERROR问题排查
在对接支付宝API的时候,遇到了一些问题,记录一下排查过程。 Body:{"datadigital_fincloud_generalsaas_face_certify_initialize_response":{"msg":"Business Failed","code":"40004","sub_msg…...
通过Wrangler CLI在worker中创建数据库和表
官方使用文档:Getting started Cloudflare D1 docs 创建数据库 在命令行中执行完成之后,会在本地和远程创建数据库: npx wranglerlatest d1 create prod-d1-tutorial 在cf中就可以看到数据库: 现在,您的Cloudfla…...
【服务器压力测试】本地PC电脑作为服务器运行时出现卡顿和资源紧张(Windows/Linux)
要让本地PC电脑作为服务器运行时出现卡顿和资源紧张的情况,可以通过以下几种方式模拟或触发: 1. 增加CPU负载 运行大量计算密集型任务,例如: 使用多线程循环执行复杂计算(如数学运算、加密解密等)。运行图…...
面向无人机海岸带生态系统监测的语义分割基准数据集
描述:海岸带生态系统的监测是维护生态平衡和可持续发展的重要任务。语义分割技术在遥感影像中的应用为海岸带生态系统的精准监测提供了有效手段。然而,目前该领域仍面临一个挑战,即缺乏公开的专门面向海岸带生态系统的语义分割基准数据集。受…...
七、数据库的完整性
七、数据库的完整性 主要内容 7.1 数据库的完整性概述 7.2 实体完整性 7.3 参照完整性 7.4 用户定义的完整性 7.5 触发器 7.6 SQL Server中数据库完整性的实现 7.7 小结 7.1 数据库的完整性概述 数据库完整性的含义 正确性 指数据的合法性 有效性 指数据是否属于所定…...
Chromium 136 编译指南 Windows篇:depot_tools 配置与源码获取(二)
引言 工欲善其事,必先利其器。在完成了 Visual Studio 2022 和 Windows SDK 的安装后,我们即将接触到 Chromium 开发生态中最核心的工具——depot_tools。这个由 Google 精心打造的工具集,就像是连接开发者与 Chromium 庞大代码库的智能桥梁…...
LCTF液晶可调谐滤波器在多光谱相机捕捉无人机目标检测中的作用
中达瑞和自2005年成立以来,一直在光谱成像领域深度钻研和发展,始终致力于研发高性能、高可靠性的光谱成像相机,为科研院校提供更优的产品和服务。在《低空背景下无人机目标的光谱特征研究及目标检测应用》这篇论文中提到中达瑞和 LCTF 作为多…...
基于鸿蒙(HarmonyOS5)的打车小程序
1. 开发环境准备 安装DevEco Studio (鸿蒙官方IDE)配置HarmonyOS SDK申请开发者账号和必要的API密钥 2. 项目结构设计 ├── entry │ ├── src │ │ ├── main │ │ │ ├── ets │ │ │ │ ├── pages │ │ │ │ │ ├── H…...
VSCode 没有添加Windows右键菜单
关键字:VSCode;Windows右键菜单;注册表。 文章目录 前言一、工程环境二、配置流程1.右键文件打开2.右键文件夹打开3.右键空白处打开文件夹 三、测试总结 前言 安装 VSCode 时没有注意,实际使用的时候发现 VSCode 在 Windows 菜单栏…...
Excel 怎么让透视表以正常Excel表格形式显示
目录 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总 1、创建数据透视表 2、设计 》报表布局 》以表格形式显示 3、设计 》分类汇总 》不显示分类汇总...
