二十三种设计模式第二十二篇--中介者模式

news2024/7/6 19:41:28

说到这个模式就有趣了,不知道大家在生活中喷到过中介没?其实中介这个词吧,我也说不上好还是坏,有时候他可以帮助人们更快的达到某个目的,但有的时候吧,这个有贼坑人,相信网络上有各种被中介坑的案例,但是今天我们讲的这个设计模式就是围绕中介来讲的,但是他并不是为了坑人的,在本文中的中介者模式主要是为了满足达到某个目的而进行的。

中介者模式:

它提供了一种集中式的方式来管理复杂对象之间的通信和交互。中介者模式通过引入一个中介者对象,将对象之间的通信转化为与中介者的通信,从而减少对象间的直接耦合。

中介者模式的核心组成部分包括:

中介者(Mediator):定义了对象之间通信的接口和规则,可以通过中介者来调度和协调对象之间的交互。

具体中介者(Concrete Mediator):实现了中介者接口,负责实际的对象协调和通信过程。

同事类(Colleague):定义了与其他同事类通信的接口,可以通过中介者来发送和接收消息。

具体同事类(Concrete Colleague):实现了同事类的接口,负责具体的行为和交互。

中介者模式的优点包括:

  1. 减少了对象间的直接耦合:通过引入中介者,对象之间的通信不再直接依赖于彼此,而是通过中介者来进行。
  2. **促进了对象的松耦合:**对象只需要与中介者进行通信,而不需要了解其他对象的细节,从而降低了对象之间的依赖。
  3. **简化了对象之间的交互:**中介者集中了对象间的交互逻辑,使得交互过程变得简单和可管理。

在这里插入图片描述

public class MediatorPatternDemo {
   public static void main(String[] args) {
      //同事对象
      User robert = new User("Robert");
      User john = new User("John");

      //robert向john打招呼的信息通过 聊天室  ChatRoom 发出.
      robert.sendMessage("Hi! John!");
      john.sendMessage("Hello! Robert!");
   }
}
/**
 * 具体中介者(Concrete Mediator)角色
 */
public class ChatRoom {

   //发送信息
   public static void showMessage(User user, String message){
      System.out.println(new Date().toString()
         + " [" + user.getName() +"] : " + message);
   }
}
/**
 * 具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
 *
 * 当User之间要互相传递消息时,由   ChatRoom这个中介者来完成.
 */
public class User {
   private String name;
 
   public String getName() {
      return name;
   }
 
   public void setName(String name) {
      this.name = name;
   }
 
   public User(String name){
      this.name  = name;
   }

   //****发信息
   public void sendMessage(String message){
      //调用中介者来发送.
      ChatRoom.showMessage(this,    message);
   }
}

其缺点在于:
中介者的责任可能会变得复杂:随着对象之间的交互规则增加,中介者可能变得复杂且难以维护。
可能导致系统中心化:过度使用中介者模式可能导致系统中心化,使得中介者成为系统的瓶颈。

中介者模式,不应该在职责混乱的时候使用,否则这样会导致系统更加混乱。

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

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

相关文章

Redis场景应用:详细实现网站粉丝关注与展示的功能

🏆作者简介,黑夜开发者,全栈领域新星创作者✌,阿里云社区专家博主,2023年6月csdn上海赛道top4。多年电商行业从业经验,对系统架构,数据分析处理等大规模应用场景有丰富经验。 🏆本文…

嵌入式Linux下 i2c-tool工具的使用方法 包括i2cdetect、i2cget、i2cset、i2cdump、i2ctransfer

要想用Linux i2c-tools必须安装如下套件,安装后就可以使用i2cdetect、i2cdump、i2cset、i2cget、i2ctransfer了。 sudo apt install i2c-tools -yi2cdetect命令 该命令用于扫描I2C总线上的设备。 语法:i2cdetect [-y] [-a] [-q|-r] i2cbus [first las…

[论文笔记] chatgpt系列 2.6 DeepSpeed-chat 数据集

一、FT数据集 & Reward model数据集 Deepspeed-chat 源代码的数据集: Dahoas/rm-static: 这是一个用于强化学习的静态环境数据集,包含了一个机器人在一个固定环境中的运动轨迹。该数据集旨在用于评估强化学习算法在静态环境下的表现。 Dahoas/full-hh-rlhf: 这是一个用于…

二十三种设计模式第二十四篇--访问者模式(完结撒花)

在访问者模式(Visitor Pattern)中,我们使用了一个访问者类,它改变了元素类的执行算法。 通过这种方式,元素的执行算法可以随着访问者改变而改变。 这种类型的设计模式属于行为型模式。根据模式,元素对象已接…

openGauss学习笔记-27 openGauss 高级数据管理- JOIN

文章目录 openGauss学习笔记-27 openGauss 高级数据管理- JOIN27.1 交叉连接27.2 内连接27.3 左外连接27.4 右外连接27.5 全外连接 openGauss学习笔记-27 openGauss 高级数据管理- JOIN JOIN子句用于把来自两个或多个表的行结合起来,基于这些表之间的共同字段。 在…

SLA探活工具EaseProbe

工具介绍 EaseProbe可以做三种工作:探测、通知和报告。 项目地址:https://github.com/megaease/easeprobe 1、安装 [rootlocalhost ]# yum -y install unzip go [rootlocalhost ]# unzip easeprobe-main.zip [rootlocalhost ]# cd easeprobe-main [r…

如祺出行冲刺自动驾驶商业化,人少的地方机会多?

网约车,正在迎来让人“不明觉厉”的新一轮竞赛。 网约车监管信息交互系统的数据显示,截至今年6月30日,全国共有318家网约车平台公司取得网约车平台经营许可,环比增加5家;网约车监管信息交互系统6月份共收到订单信息7.…

作为新手小白,你应该了解的五个3DMAX的使用干货小技巧!

3Dmax是一款著名的三维建模和动画制作软件,广泛应用于建筑设计、影视特效、游戏开发等领域。对于初学者来说,熟练掌握一些干货小技巧,可以帮助大家更快地上手和使用这款强大的软件。 一、学习基础操作技巧 首先,你需要学习一些基…

留存测试数据,Apipost接口用例详解

接口用例可以在不影响源接口数据的情况下对接口添加多个用例,方便测试并保存测试数据。 创建用例 左侧目录选择接口后进入接口用例页面,点击添加用例 在弹出窗口中修改各种参数。如登录接口,可修改用户名为空,并添加断言。 执行…

【phaser微信抖音小游戏开发006】给文本增加点击事件

新建st006,为文本增加点击事件。 我们加了一个计数的count,点击一次增加一下,并显示到屏幕上去。 效果如下图: 其它的对象以此类推即可,先置inputEnable为true,然后再增加一个inputDown事件即可。

IO进程线程day4(2023.8.1)

一、Xmind整理: 进程的五态图: 内存分布图: 注:栈区:存储局部变量,形参(上边打错了!!!) 虚拟内存和物理内存: 进程的STAT&#xff1a…

C++设计模式之装饰者模式

文章目录 C装饰者设计模式什么是装饰者模式优缺点优点缺点 如何使用 C装饰者设计模式 什么是装饰者模式 装饰者模式是一种设计模式,它允许我们动态地将行为附加到对象上,而无需改变对象本身的定义。它将一个对象的行为包装在一个独立的的对象中&#xf…

数据库事务--数据库事务隔离级别实战

2、演示环境 数据库及工具 ➢MySQL版本 5.5.47 ➢数据库工具 Navicat for MySQL 数据库命令 ➢查看数据库版本: select version();➢查看数据库现在的隔离级别: select session.tx_ isolation;➢修改隔离级别: set session.tx_ _isolation级别参数;➢级别参数: READ-UN…

内网横向移动—非约束委派约束委派

内网横向移动—非约束委派&约束委派 1. 委派攻击介绍1.1. 约束委派分类 2. 非约束委派2.1. 配置非约束委派2.1.1. 域内主机配置2.1.2. 注册对象2.1.3. 域内用户配置 2.2. 案例测试2.2.1. 查询服务账户2.2.2. 查询机器账户2.2.3. 机器通讯2.2.4. 导出票据2.2.5. 导入票据2.2…

算法题--二叉树(二叉树的最近公共祖先、重建二叉树、二叉搜索树的后序遍历序列)

目录 二叉树 题目 二叉树的最近公共祖先 原题链接 解析 二叉搜索树的最近公共节点 核心思想 答案 重建二叉树 题目链接 解析 核心思想 答案 二叉搜索树的后序遍历序列 原题链接 解析 核心思想 答案 二叉树 该类题目的解决一般是通过节点的遍历去实现&#x…

edge://settings/defaultbrowser default ie

Microsoft Edge 中的 Internet Explorer 模式 有些网站专为与 Internet Explorer 一起使用,它们具有 Microsoft Edge 等新式浏览器不支持的功能。 如果你需要查看其中的某个网站,可使用 Microsoft Edge 中的 Internet Explorer 模式。 大多数网站在新…

优先级队列 (堆)

目录 一,堆的概念 二, 堆的存储结构 三, 堆的实现 3.1 shiftDown() 3.2 shiftUp() 3.3 shiftDown 与 shiftUp 的时间复杂度 四,堆排序 一,堆的概念 堆常用于实现优先队列(Priority Queue&#xff0…

【算法训练营】求最小公倍数+另类加法+走方格的方案数

7月31日 求最小公倍数题目题解代码 另类加法题目题解代码 走方格的方案数题目题解| 1 | 2 | 3 || 4 | 5 | 6 || 7 | 8 | 9 |代码 求最小公倍数 题目 点击跳转: 求最小公倍数 题解 最小公倍数 两数之积除以最大公约数,这里使用碾转相除法进行最大公约数的求解&am…

学习盒模型

1.是什么 2.标准模型 3.怪异模型 一、是什么 一个盒子由四部分组成: content、padding、border、margin 在CSS中,盒子模型可以分成: W3C 标准盒子模型IE 怪异盒子模型 默认情况下,盒子模型为W3C标准盒模型 二、标准盒模型 盒子总…

NetApp FAS存储系统磁盘更换详细步骤

说起更换磁盘,都会说非常简单,但无数次的血淋淋的教训让我们再次来审视一下更换磁盘的专业步骤。本文就是介绍最专业的也是最简单的磁盘更换步骤。常在河边走哪有不湿鞋,希望做了几十年攻城狮的你不要在这里翻船。 本文介绍的内容适用于Onta…