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

news2024/9/24 15:23:08

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

中介者模式(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;
    }

    @Override
    void fly() {
        System.out.println("请求起飞");
        this.controlTower.acceptRequest(this,"fly");
    }

    @Override
    void land() {
        System.out.println("请求降落");
        this.controlTower.acceptRequest(this,"land");
    }

    @Override
    void 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.coloradmin.cn/o/1387980.html

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

相关文章

burp靶场-path traversal

路径遍历 1.路径遍历漏洞 ### 什么是路径遍历 路径遍历也称为目录遍历。这些漏洞使攻击者能够读取正在运行应用程序的服务器上的任意文件。这可能包括&#xff1a; 应用程序代码和数据。 后端系统的凭据。 敏感的操作系统文件。### <img src"/loadImage?filename218…

将Sqoop与Hive集成无缝的数据分析

将Sqoop与Hive集成是实现无缝数据分析的重要一步&#xff0c;它可以将关系型数据库中的数据导入到Hive中进行高级数据处理和查询。本文将深入探讨如何实现Sqoop与Hive的集成&#xff0c;并提供详细的示例代码和全面的内容&#xff0c;以帮助大家更好地了解和应用这一技术。 为…

LLM:Scaling Laws for Neural Language Models 理解

核心结论 1&#xff1a;LLM模型的性能主要与计算量C&#xff0c;模型参数量N和数据大小D三者相关&#xff0c;而与模型的具体结构 (层数/深度/宽度) 基本无关。三者满足: C ≈ 6ND 2. 为了提升模型性能&#xff0c;模型参数量N和数据大小D需要同步放大&#xff0c;但模型和数…

sizeof与strlen的使用及其区别

目录 1. sizeof 1.1sizeof简介 1.2 sizeof的使用 1.3 sizeof的使用注意事项 1.4 sizeof用于数组 2.strlen&#xff08;&#xff09;函数 3.区别 示例1 示例2 示例3 4.总结 1. sizeof 1.1sizeof简介 sizeof是一个编译时运算符&#xff0c;可用于任何变量名、类型名…

【PID精讲 14 】积分分离PID和抗积分饱和PID

文章目录 一、积分分离PID1.1 积分分离PID算法基本思想1.2 积分分离PID算法实现步骤1.3 积分分离PID算法1.4 积分分离PID算法实现1.5 积分分离PID算法仿真实例1.6 积分分离PID算法的优缺点 二、抗积分饱和PID2.1 积分饱和现象2.2 抗积分饱和算法2.3 抗积分饱和算法实现2.4 抗积…

tda7294功放电路图大全

简易电子管功放电路图&#xff08;一&#xff09; 6P3P单端A类电子管功放电路图 如图为6P3P单端A类电子管功放电路图。VT1、VT2直流通路串联。VT1构成普通的三极管共阴放大器&#xff0c;VTr2构成阴极输出器&#xff0c;对VT1而言VT2是一个带电流负反馈的高阻负载。音频信号由…

C程序技能:彩色输出

在终端上输出的字体总是单色&#xff0c;但在一些场景彩色输出更能满足需求&#xff0c;在Linux环境中&#xff0c;可以使用终端控制字符来设置输出字符的颜色&#xff0c;在部分版本的Windows系统中也可以使用。本文参考一些文献简要介绍一下在Windows下彩色输出的方法。 1. …

最新Win11系统怎么删除开机密码 Win11取消登录密码图文教程

将账户设置为自动输入微软账户的密码&#xff0c;就是省略了手动打密码的步骤而已变成自动化了。 教程如下&#xff1a; A方法↓第一步:打开设置——账户——登录选项 ↓第二步:登录选项——其他设置——为了提高安全性&#xff0c;这里选择关闭&#xff0c;这一步是为了降低…

基于SSM的流浪动物救助站

末尾获取源码 开发语言&#xff1a;Java Java开发工具&#xff1a;JDK1.8 后端框架&#xff1a;SSM 前端&#xff1a;Vue 数据库&#xff1a;MySQL5.7和Navicat管理工具结合 服务器&#xff1a;Tomcat8.5 开发软件&#xff1a;IDEA / Eclipse 是否Maven项目&#xff1a;是 目录…

提升开发效率的google插件

在如今的软件开发领域&#xff0c;Google Chrome浏览器的开发者插件扮演着至关重要的角色&#xff0c;为开发人员提供了丰富的工具和功能&#xff0c;从而提高了开发效率。下面介绍几款强大的 Google 插件&#xff0c;它们在不同方面为开发者提供了便利&#xff0c;并能显著提升…

任务12:使用Hadoop Streaming解压NCDC天气原始数据

任务描述 知识点&#xff1a; NCDC原始的气象数据上传到HDFSMapReduce程序处理NCDC原始数据 重 点&#xff1a; 熟练使用HDFS基础命令查看HDFS文件块的分布情况掌握Linux系统Shell脚本的编写熟练使用MapReduce程序解压缩文件使用MapReduce程序处理NCDC气象数据 内 容&am…

2024.1.15 网络编程 作业

思维导图 练习题 1.实现TCP服务器和客户端之间的通信 server.c #include <myhead.h>int main(int argc, char const *argv[]) {//创建套接字int sfd socket(AF_INET, SOCK_STREAM, 0);//端口复用&#xff0c;作用&#xff1a;关闭服务器后再启动不会等待int reuse 1…

谷粒商城篇章8 ---- P236-P247 ---- 购物车【分布式高级篇五】

目录 1 环境搭建 1.1 新建购物车服务模块gulimall-cart 1.2 购物车服务相关配置 1.2.1 pom.xml 1.2.2 yml配置 1.2.2.1 application.yml配置 1.2.2.2 bootstrap.yml配置 1.2.3 主类 1.3 SwitchHosts增加配置 1.4 网关配置 1.5 整合SpringSession 1.5.1 session数据…

RPA与通知机器人的完美结合

写在前面 在现代快节奏的工作环境中&#xff0c;我们经常会面临多个任务同时进行的情况&#xff0c;你还在为时间不够用、忙碌而惆怅吗&#xff1f;你还在为时刻盯着电脑流程而烦恼吗&#xff1f;你还在为及时收不到自己的自动化任务进度而焦躁吗&#xff1f;别担心&#xff0…

Elasticsearch:聊天机器人教程(二)

这是继上一篇文章 “Elasticsearch&#xff1a;聊天机器人教程&#xff08;一&#xff09;”的续篇。本教程的这一部分讨论聊天机器人实现中最有趣的方面&#xff0c;以帮助你理解它并对其进行自定义。 数据摄入 在此应用程序中&#xff0c;所有示例文档的摄取都是通过 flask …

教你用五步让千年的兵马俑跳上现代的科目三?

以下是一张我上月去西安拍的兵马俑照片&#xff1a; 使用通义千问&#xff0c;5步就能它舞动起来&#xff0c;跳上现在流行的“科目三”舞蹈。 千年兵马俑跳上科目三 全民舞王 第1步 打开通义千问App&#xff0c;我使用的是华为手机&#xff0c;苹果版的没试&#xff1b; 在…

编译 FastDFS 时报错 fatal error: sf/sf_global.h: No such file or directory 解决办法

编译 FastDFS 时&#xff0c;报错如下 gcc -Wall -D_FILE_OFFSET_BITS64 -D_GNU_SOURCE -g -O1 -DDEBUG_FLAG -c -o ../common/fdfs_global.o ../common/fdfs_global.c -I../common -I/usr/local/include In file included from ../common/fdfs_global.c:21:0: ../common/fdf…

【控制篇 / 分流】(7.4) ❀ 01. 对指定IP网段访问进行分流 ❀ FortiGate 防火墙

【简介】公司有两条宽带&#xff0c;一条ADSL拨号用来上网&#xff0c;一条移动SDWAN&#xff0c;已经连通总部内网服务器&#xff0c;领导要求&#xff0c;只有访问公司服务器IP时走移动SDWAN&#xff0c;其它访问都走ADSL拨号&#xff0c;如果你是管理员&#xff0c;你知道有…

pod 控制器

pod 控制器&#xff1a; pv pvc 动态pv pod控制器&#xff1a;工作负载&#xff0c;workload&#xff0c;用于管理pod的中间层&#xff0c;确保pod资源符号预期的状态。 预期状态&#xff1a; 1&#xff0c;副本数 2&#xff0c;容器的重启策略 3&#xff0c;镜像拉取策略…

【软件测试】前端性能测试工具原理

不同于后端性能测试知识的琐碎、独立&#xff0c;这篇文章为你介绍前端性能测试工具WebPagetest&#xff0c;以一个具体网站为例&#xff0c;和你分析WebPagetest的用法&#xff0c;以及前端性能相关的主要概念与指标。 WebPagetest功能简介 WebPagetest&#xff0c;是前端性…