设计模式:12、中介者模式

embedded/2024/11/28 7:50:57/

目录

0、定义

1、中介者模式的四种角色

2、中介者模式的UML类图

3、示例代码


0、定义

        用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

1、中介者模式的四种角色

  • 中介者(Mediator):中介者是一个接口,该接口定义了用于同事(colleague)对象之间进行通信的方法。
  • 具体中介者(ConcreteMediator):具体中介者是实现中介者接口的类。具体中介者需要包含所有具体同事(ConcreteColleague)的引用,并通过实现中介者接口中的方法来满足具体同事之间的通信请求。
  • 同事(Colleague):一个接口,规定了具体同事需要实现的方法。
  • 具体同事(ConcreteColleague):实现同事接口的类。具体同事需要包含具体中介者的引用,一个具体同事需要和其他具体同事交互时,只需将自己的请求通知给它所包含的具体中介者即可。

2、中介者模式的UML类图

3、示例代码

同事

package xyz.jangle.design.mediator;
/*** 同事* @author Administrator**/
public interface Colleague {/*** 发送消息* @param mess*/public void giveMess(String mess);/*** 接收消息* @param mess*/public void receiverMess(String mess);}

中介者

package xyz.jangle.design.mediator;
/*** 中介者* @author Administrator**/
public interface Mediator {/*** 注册同事* @param colleague*/public void registerColleague(Colleague colleague);/*** 传递消息* @param colleague* @param mess*/public void deliverMess(Colleague colleague,String mess);}

具体中介者

package xyz.jangle.design.mediator;import java.util.ArrayList;
import java.util.List;
/*** 具体中介者* @author Administrator**/
public class ConcreteMediator implements Mediator{List<Colleague> list = new ArrayList<Colleague>();@Overridepublic void registerColleague(Colleague colleague) {list.add(colleague);}@Overridepublic void deliverMess(Colleague colleague, String mess) {for(Colleague coll:list) {if(coll != colleague) {	//排除自己coll.receiverMess(mess);}}}}

具体同事1

package xyz.jangle.design.mediator;
/*** 具体同事* @author Administrator**/
public class ConcreteColleague1 implements Colleague {Mediator mediator;public ConcreteColleague1(Mediator mediator) {super();this.mediator = mediator;mediator.registerColleague(this);}@Overridepublic void giveMess(String mess) {mediator.deliverMess(this, mess);}@Overridepublic void receiverMess(String mess) {System.out.println("ConcreteColleague1收到消息:"+mess);}}

具体同事2

package xyz.jangle.design.mediator;
/*** 具体同事* @author Administrator**/
public class ConcreteColleague2 implements Colleague {Mediator mediator;public ConcreteColleague2(Mediator mediator) {super();this.mediator = mediator;mediator.registerColleague(this);}@Overridepublic void giveMess(String mess) {mediator.deliverMess(this, mess);}@Overridepublic void receiverMess(String mess) {System.out.println("ConcreteColleague2收到消息:"+mess);}}

客户端(使用)

package xyz.jangle.design.mediator;public class AppMain12 {public static void main(String[] args) {Mediator mediator = new ConcreteMediator();	//创建具体中介者Colleague colleague1 = new ConcreteColleague1(mediator);	//创建同事1Colleague colleague2 = new ConcreteColleague2(mediator);	//创建同事2colleague1.giveMess("hello 123");	//同事1发送消息给其他同事colleague2.giveMess("hello 321");	//同事2发送消息给其他同事}}

执行结果

ConcreteColleague2收到消息:hello 123
ConcreteColleague1收到消息:hello 321


http://www.ppmy.cn/embedded/141136.html

相关文章

C++ 类和对象(初始化列表)

目录 一、前言 二、正文 1.初始化列表 1.1初始化的格式 1.2初始化列表的使用 1.2.1引用成员变量初始化 1.2.2const成员变量 1.2.3没有默认构造函数的成员变量必须在初始化列表初始化 2.成员变量声明处给缺省值 一、前言 前面我们已经用所学知识运算符重载写了一个日期计…

Javaweb 前端 HTML css 案例 总结

顶部导航栏 弹性布局 搜索表单区域 表单标签 表单标签&#xff0c;表单项 复选&#xff0c;一次选多个 隐藏域&#xff0c;看不到&#xff0c;但会传参数 text输入框 radio单选 男女&#xff0c;是 前端页面上显示的值 搜索表单区域 button 按钮 表格数据展示区域 fo…

PHP 超级全局变量

超级全局变量是指在php任意脚本下都可以使用 PHP 超级全局变量列表: $GLOBALS&#xff1a;是PHP的一个超级全局变量组&#xff0c;在一个PHP脚本的全部作用域中都可以访问。 $_SERVER&#xff1a;$_SERVER 是一个PHP内置的超级全局变量,它是一个包含了诸如头信息(header)、路…

docker搭建socks5代理

准备工作 VPS安全组/策略放行相应端口如启用了防火墙&#xff0c;放行相应端口 实际操作 我们选用“历史悠久”的Dante socks5 代理服务器&#xff0c;轻量、稳定。Github也有对dante进行进一步精简的镜像&#xff0c;更为适宜。github项目地址如下&#xff1a; https://gi…

Educator头歌:离散数学 - 图论

第1关&#xff1a;图的概念 任务描述 本关任务&#xff1a;学习图的基本概念&#xff0c;完成相关练习。 相关知识 为了完成本关任务&#xff0c;你需要掌握&#xff1a;图的概念。 图的概念 1.一个图G是一个有序三元组G<V,R,ϕ>&#xff0c;其中V是非空顶点集合&am…

数据结构--图

图 图的基本概念图的存储结构邻接矩阵邻接表十字链表邻接多重表 图的遍历广度优先遍历深度优先遍历 图的应用最小生成树克鲁斯卡尔算法普里姆算法 最短路径迪杰斯特拉算法贝尔曼-福特算法弗洛伊德算法 拓扑排序关键路径 图的基本概念 图是由顶点集合及顶点间的关系组成的一种数…

ArkTS四种渲染控制能力

大家好&#xff0c;我是 V 哥。ArkTS 是 OpenHarmony 框架的一部分&#xff0c;提供了声明式 UI 渲染的能力。下面来对ArkTS中四种渲染控制能力&#xff1a; if/else、ForEach、LazyForEach 和 ContentSlot 详细介绍一下&#xff1a; 1. if/else 渲染控制 if/else 是 ArkTS 提…

第一章:Go 语言概述 2.安装和配置 Go 开发环境 --Go 语言轻松入门

第一章&#xff1a;Go 语言概述 2.安装和配置 Go 开发环境 --Go 语言轻松入门 安装和配置 Go 开发环境相对简单&#xff0c;以下是在不同操作系统上安装和配置 Go 的步骤&#xff1a; Windows 1. 下载 Go 安装包 访问 Go 下载。选择适用于 Windows 的安装包&#xff08;通常…