设计模式-行为型-中介者模式-Mediator

article/2024/4/20 0:07:21

同事抽象类

public abstract class Colleague {private Mediator mediator;public abstract void play(String data);
}

视频同事

public class AudioColleague extends Colleague {public void play(String data) {System.out.println("画外音是:" + data);}
}

光驱同事

public class CdColleague extends Colleague {private String data = "";public void play(String data) {this.data = data;System.out.println("从cd中读取数据:" + data);getMediator().change(this);}
}

处理器同事

public class CpuColleague extends Colleague {private String videoData = "";//读取出来的视频数据private String audioData = "";//读取出来的音频数据public void play(String data) {//处理数据String[] split = data.split(",");this.videoData = split[0];this.audioData = split[1];System.out.println("从cpu中读取视频:" + videoData);System.out.println("从cpu中读取音频:" + audioData);getMediator().change(this);}
}

声音同事

public class VideColleague extends Colleague {public void play(String data) {System.out.println("您正在观看的是:" + data);}
}

中介者接口

public interface Mediator { void change(Colleague c); }

主板中介者类

public class MainBoardMediator implements Mediator {private Colleague cd;private Colleague cpu;private Colleague video;private Colleague audio;@Overridepublic void change(Colleague c) {if (c instanceof CdColleague) {afterCdReadData((CdColleague) c);} else if (c instanceof CpuColleague) {afterCpuReadData((CpuColleague) c);}}private void afterCdReadData(CdColleague cd) {//光驱读取数据后与其他对象交互String data = cd.getData();cpu.play(data);}private void afterCpuReadData(CpuColleague cd) {//cpu读取数据后与其他对象交互String videoData = cd.getVideoData();String audioData = cd.getAudioData();video.play(videoData);audio.play(audioData);}
}

演示类

public class Demo {public static void main(String[] args) {MainBoardMediator mediator = new MainBoardMediator();Colleague audio = new AudioColleague(mediator);Colleague cd = new CdColleague(mediator);Colleague cpu = new CpuColleague(mediator);Colleague video = new VideColleague(mediator);mediator.setAudio(audio);mediator.setCd(cd);mediator.setCpu(cpu);mediator.setVideo(video);cd.play("CCTV,天气预报");}
}

演示结果

为了使代码博客代码更简洁,我省略了构造方法和set/get方法


http://www.ngui.cc/article/show-2002336.html

相关文章

Centos7安装单机版Kafka

下载 链接:https://pan.baidu.com/s/1W8lVEF6Y-xlg6zr3l9QAbg?pwdhbkt 提取码:hbkt 上传到服务器/opt目录 安装 # kafka安装目录为 /opt/kafka cd /opt; mkdir kafka; mv kafka_2.13-2.7.0.tgz ./kafka;cd kafka; #解压 tar -zxvf kafka_2.13-2.7.0…

EXCEL地理数据处理工具(地图任务)

版本号 作者 修订内容 发布日期 1.0 小O 更新至0705版 2022-4-28 1.1 小O 更新至0772版 2024年4月3日 一、概述 小O地图EXCEL插件版提供基于EXCEL表格进行地理数据处理、地图可视化、地图绘图等功能,地理工具是用户使用频率很高的功能模块。地理工具能…

【Django学习笔记(四)】JavaScript 语言介绍

JavaScript 语言介绍 前言正文1、JavaScript 小案例2、代码位置2.1 在当前 HTML 文件中2.2 在其他 js 文件中 3、代码注释3.1 HTML的注释3.2 CSS的注释3.3 Javascript的注释 4、变量 & 输出4.1 字符串4.2 数组4.3 对象(python里的字典) 5、条件语句6、函数7、DOM7.1 根据 I…

搜维尔科技:TechViz 虚拟现实在工业项目中沉浸式体验

TechViz虚拟现实在工业项目中沉浸式体验 搜维尔科技:TechViz 虚拟现实在工业项目中沉浸式体验

docker------docker入门

🎈个人主页:靓仔很忙i 💻B 站主页:👉B站👈 🎉欢迎 👍点赞✍评论⭐收藏 🤗收录专栏:Linux 🤝希望本文对您有所裨益,如有不足之处&#…

C#多页面共用一个实例

C#多页面共用一个实例 案例&#xff1a; C#与硬件设备交互&#xff0c;交互类里面有打开设备、数据接发等1操作&#xff0c;在其他许多地方需要调用该设备兼顾各代码的耦合度 采用单例模式&#xff0c;eg.CAN设备&#xff1a; private CANClass(){}/// <summary>/// 获…

3d代理模型怎么转换成标准模型---模大狮模型网

在当今的虚拟世界中&#xff0c;3D建模技术被广泛运用于游戏开发、电影制作、工业设计等领域。在3D建模过程中&#xff0c;有时会遇到需要将代理模型转换成标准模型的情况。模大狮将从理论和实践两方面&#xff0c;介绍如何将3D代理模型转换成标准模型&#xff0c;以帮助读者更…

acwing算法提高之图论--最小生成树的扩展应用

目录 1 介绍2 训练 1 介绍 本专题用来记录使用最小生成树算法&#xff08;prim或kruskal&#xff09;解决的扩展题目。 2 训练 题目1&#xff1a;1146新的开始 C代码如下&#xff0c; #include <iostream> #include <cstring> #include <algorithm>usin…

数据转换 | Matlab基于GASF格拉姆角和场一维数据转二维图像方法

目录 效果分析基本介绍程序设计参考资料获取方式 效果分析 基本介绍 基于GASF&#xff08;Gramian Angular Summation Field&#xff09;的方法&#xff0c;将一维数据转换为二维图像的步骤描述 标准化数据&#xff1a; 首先&#xff0c;对一维时序数据进行标准化处理&#xf…

​如何使用ArcGIS Pro进行洪水淹没分析

洪水淹没分析是一种常见的水文地理信息系统应用&#xff0c;用于模拟和预测洪水事件中可能受到淹没影响的地区&#xff0c;这里为大家介绍一下ArcGIS Pro进行洪水淹没分析的方法&#xff0c;希望能对你有所帮助。 数据来源 教程所使用的数据是从水经微图中下载的DEM数据&…