设计模式—行为型模式之中介者模式

设计模式—行为型模式之中介者模式

中介者模式(Mediator Pattern):用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,减少对象间混乱的依赖关系,从而使其耦合松散,而且可以独立地改变它们之间的交互。对象行为型模式。

包含以下角色:

  • Mediator: 抽象中介者

  • ConcreteMediator: 具体中介者

  • Colleague: 抽象同事类

  • ConcreteColleague: 具体同事类

示例

如下图所示,如果我们要几架飞机,互相联系的话,会很麻烦。如果有一个中间塔台来联系,就会方便很多。

图示

代码如下:

/*** 抽象机长*/
public abstract class AbstarctCaptain {//起飞abstract void fly();//降落abstract void land();//完成abstract void success();}
/*** 塔台:中介者** 网状变为星状*/
public class ControlTower {private boolean canDo = true;//接受请求...public void acceptRequest(AbstarctCaptain captain,String action){if("fly".equals(action)||"land".equals(action)){if(canDo == true){System.out.println("允许......");canDo = false;}else {System.out.println("不允许.....");}}if("success".equals(action)){canDo = true;}}
}

具体机长:

public class CZ222 extends AbstarctCaptain{private ControlTower controlTower;public void setControlTower(ControlTower controlTower) {this.controlTower = controlTower;}@Overridevoid fly() {System.out.println("请求起飞");this.controlTower.acceptRequest(this,"fly");}@Overridevoid land() {System.out.println("请求降落");this.controlTower.acceptRequest(this,"land");}@Overridevoid success() {System.out.println("成功");this.controlTower.acceptRequest(this,"success");}
}

内部包含塔台;

多个类

其余两个类也是如此;

测试类如下:

public class MediatorTest {public static void main(String[] args) {ControlTower controlTower = new ControlTower();CZ222 cz222 = new CZ222();cz222.setControlTower(controlTower);EU111 eu111 = new EU111();eu111.setControlTower(controlTower);cz222.fly();eu111.fly();cz222.success();eu111.fly();eu111.success();}
}

运行结果如下:

运行截图

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

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

相关文章

【Java SE语法篇】10.String类

📚博客主页:爱敲代码的小杨. ✨专栏:《Java SE语法》 ❤️感谢大家点赞👍🏻收藏⭐评论✍🏻,您的三连就是我持续更新的动力❤️ 文章目录 前言1. String类1.1 字符串的构造1.2 String对象的比…

NLP论文阅读记录 - 2021 | WOS HG-News:基于生成式预训练模型的新闻标题生成

文章目录 前言0、论文摘要一、Introduction1.1目标问题1.2相关的尝试1.3本文贡献 二.相关工作三.本文方法四 实验效果4.1数据集4.2 对比模型4.3实施细节4.4评估指标4.5 实验结果4.6 细粒度分析 五 总结思考 前言 HG-News: News Headline Generation Based on a Generative Pre-…

【数位dp】【C++算法】600. 不含连续1的非负整数

作者推荐 【矩阵快速幂】封装类及测试用例及样例 涉及知识点 数位dp LeetCode600. 不含连续1的非负整数 给定一个正整数 n ,请你统计在 [0, n] 范围的非负整数中,有多少个整数的二进制表示中不存在 连续的 1 。 示例 1: 输入: n 5 输出: 5 解释: 下…

刷题 ------ 二分枚举(查找)

文章目录 1.x 的平方根2.第一个错误的版本3.有效的完全平方数4.猜数字大小5.排列硬币6. 寻找比目标字母大的最小字母7. 二分查找8.检查整数以及其两倍数是否存在9. 两个数组间的距离值10.特殊的数组的特征值11.找出数组排序后的目标下标12.和有限的最长子序列13.正整数和负数的…

Day04

今日任务 24.两两交换链表中的节点19.删除链表的倒数第N个节点 160. 链表相交142.环形链表II 24 两两交换链表中的节点 题目链接:https://leetcode.cn/problems/swap-nodes-in-pairs/description/ 方法一:遍历实现 思路: 代码&#xff…

Linux/OpenAdmin

Enumeration nmap 用nmap扫描发现目标对外开放了22和80,端口详细信息如下 从nmap的结果看到,是apache的default page,使用工具跑一下目录,看了官 网文档的结果然后写个小字典节约时间,扫描结果如下 On the page at /…

new Handler(getMainLooper())与new Handler()的区别

Handler 在Android中是一种消息处理机制。 new Handler(); 创建handler对象,常用在已经初始化了 Looper 的线程中调用这个构造函数(即非主线程),如果感觉不好理解,可以把Handler handler new Handler() 理解为常用在…

Redis学习指南(11)-Redis的有序集合数据类型介绍

文章目录 特点和用途常用命令插入操作查询操作删除操作 示例总结 Redis的有序集合数据类型是一种高效的数据结构,能够存储多个成员和对应的分值,并能够根据分值进行快速的查找、插入和删除操作。本文将详细介绍Redis的有序集合数据类型,包括其…

【PostgreSQL】函数与操作符-数学函数和操作符

PostgreSQL函数与操作符-数学函数和操作符 PostgreSQL提供了许多数学函数和操作符,以处理数值数据。以下是一些常用的数学函数和操作符: PostgreSQL数学操作符 下表展示了所有可用的数学操作符。 操作符描述例子结果加2 35-减2 - 3-1*乘2 * 36/除&a…

曲面上偏移命令的查找

今天学习老王的SW绘图时,遇到一个命令找不到,查询了一会终于找到了这个命令,防止自己忘记,特此记录一下,这个命令就是“曲面上偏移”,网上好多的教程都是错误的,实际上这个命令没有在曲面里面&a…

MySQL(三)——函数

上期文章 MySQL(二)——SQL 文章目录 上期文章字符串函数数值函数日期函数流程函数总结 函数:一段可以直接被另一段程序调用的程序或代码 字符串函数 函数功能CONCAT(S1,S2,…Sn)字符串拼接,将S1,S2,…Sn拼接成一个字符串LOWER…

js原型和new过程

在JavaScript中,原型和继承是实现代码复用和扩展的重要机制。而new关键字则是用来创建对象的。 原型(Prototype): 在JavaScript中,每个对象都有一个原型(prototype)对象,这个原型对…

Docker查找docker组及用户

查找所有组及用户: cat /etc/passwd 可以查看所有用户的列表w 可以查看当前活跃的用户列表cat /etc/group 查看用户组在/etc/group 中的每条记录分四个字段: 第一字段:用户组名称; 第二字段:用户组密码; 第…

快速前端开发01

前端开发 1 前端开发1.快速开发网站2.浏览器能识别的标签2.1 编码(head)2.2 title(head)2.3 标题2.4 div和span2.4.5 超链接2.4.6 图片小结2.4.7 列表2.4.8 表格2.4.9 input系列(7个)2.4.10 下拉框2.4.11 多…

php踩坑:ajax向php提交整型值,$_POST中获取到的却是string类型的值

前端ajax提交number类型的值-1: $.ajax({url : theUrl,data : {data: {s: -1} // s是整数值-1},type: post,success: function(data) {console.log(data);} }php端获取到的却是string类型的"-1": $data$_POST[data]; // {"s":&…

Flask 项目怎么配置并创建第一个小项目?附上完成第一个小案例截图

目录 1. 为什么要学习 flask? 2. flask 是什么? 3. flask 如何使用? 要安装 Flask,可以按照以下步骤进行: 4. 使用流程 4.1. 新建项目 4.1.1. 打开 pycharm,新建项目 4.1.2. 设置目录,并…

MySql前言

🎥 个人主页:Dikz12🔥个人专栏:MySql📕格言:那些在暗处执拗生长的花,终有一日会馥郁传香欢迎大家👍点赞✍评论⭐收藏 目录 数据库有哪些软件?? Mysql MySql数…

一道使用LinkedList和Stack解决的算法题

一、无法吃午餐的学生数量 学校的自助午餐提供圆形和方形的三明治,分别用数字 0 和 1 表示。所有学生站在一个队列里,每个学生要么喜欢圆形的要么喜欢方形的。 餐厅里三明治的数量与学生的数量相同。所有三明治都放在一个 栈 里,每一轮&#…

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳

华为手表开发:WATCH 3 Pro(10)获取心率_java 华为手表获取心跳 Excerpt 文章浏览阅读1.2k次。鸿蒙开发,获取手表心跳,按钮点击后触发的方法,我们将跳转页面的代码写在这个位置就可以实现点击按钮进行跳转页面的动作。在HTML文件“index.hml”,添加按钮,这里按钮用到是标…

14.鸿蒙HarmonyOS App(JAVA)时钟组件计时器倒计时单选按钮复选框开关switch与开关按钮ToggleButton图像组件示范

鸿蒙HarmonyOS App(JAVA) 时钟组件 计时器 倒计时 单选按钮 复选框 开关switch 开关按钮ToggleButton 图像组件 ability_main.xml <?xml version"1.0" encoding"utf-8"?> <DirectionalLayoutxmlns:ohos"http://schemas.huawei.co…