28 行为型模式-中介者模式

1 中介者模式介绍

在这里插入图片描述
在这里插入图片描述

2 中介者模式原理

在这里插入图片描述
在这里插入图片描述

3 中介者模式实现
/*** 抽象中介者**/
public interface Mediator {//处理同事对象注册与转发同事对象信息的方法void apply(String key);
}
/*** 具体中介者**/
public class MediatorImpl implements Mediator {@Overridepublic void apply(String key) {System.out.println("最终中介者执行的操作,key为" + key);}
}
/*** 抽象同事类**/
public abstract class Colleague {private Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}public Mediator getMediator() {return mediator;}//同事间进行交互的抽象方法public abstract void exec(String key);
}
/*** 具体同事类**/
public class ConcreteColleagueA extends Colleague{public ConcreteColleagueA(Mediator mediator) {super(mediator);}@Overridepublic void exec(String key) {System.out.println("=====在A同事中,通过中介者执行!");getMediator().apply(key);}
}
/*** 具体同事类**/
public class ConcreteColleagueB extends Colleague{public ConcreteColleagueB(Mediator mediator) {super(mediator);}@Overridepublic void exec(String key) {System.out.println("=====在B同事中,通过中介者执行!");getMediator().apply(key);}
}
public class Client {public static void main(String[] args) {//创建中介者Mediator mediator = new MediatorImpl();//创建同事对象Colleague c1 = new ConcreteColleagueA(mediator);c1.exec("key-A");Colleague c2 = new ConcreteColleagueB(mediator);c2.exec("key-B");}
}
4 中介者模式应用实例

【例】租房

/*** 抽象中介者**/
public abstract class Mediator {//创建联络方法public abstract void contact(String message, Person person);
}
/*** 抽象同事类**/
public abstract class Person {protected String name;//持有中介者的引用protected Mediator mediator;public Person(String name, Mediator mediator) {this.name = name;this.mediator = mediator;}
}
/*** 具体的中介者-中介机构**/
public class MediatorStructure extends Mediator {//中介知晓 房租出租人和承租人的信息private HouseOwner houseOwner;  //房主private Tenant tenant;  //租房者public Tenant getTenant() {return tenant;}public void setTenant(Tenant tenant) {this.tenant = tenant;}public HouseOwner getHouseOwner() {return houseOwner;}public void setHouseOwner(HouseOwner houseOwner) {this.houseOwner = houseOwner;}@Overridepublic void contact(String message, Person person) {if(person == houseOwner){//如果是房主,则租房者获得信息tenant.getMessage(message);}else{//如果是租房者,则房租获得信息houseOwner.getMessage(message);}}
}
/*** 具体同事类-房租拥有者**/
public class HouseOwner extends Person {public HouseOwner(String name, Mediator mediator) {super(name, mediator);}//与中介联系public void contact(String message){mediator.contact(message,this);}//获取信息public void getMessage(String message){System.out.println("房主: " + name +",获取到的信息: " + message);}
}
/*** 具体同事类-承租人**/
public class Tenant extends Person {public Tenant(String name, Mediator mediator) {super(name, mediator);}public void contact(String message){mediator.contact(message,this);}public void getMessage(String message){System.out.println("租房者"+name+",获取到的信息: " + message);}
}
public class Client {public static void main(String[] args) {//中介机构MediatorStructure mediator =  new MediatorStructure();//房主HouseOwner houseOwner = new HouseOwner("张三", mediator);//租房者Tenant tenant = new Tenant("李四", mediator);//中介收集房主及租房者信息mediator.setHouseOwner(houseOwner);mediator.setTenant(tenant);//租房人的需求tenant.contact("需要在天通苑附近找一个,两室一厅的房子一家人住,房租在5000~6000之间");//房主的需求houseOwner.contact("出租一套天通苑地跌站附近的两室一厅,房租6000,可谈");}
}
5 中介者模式总结

在这里插入图片描述
在这里插入图片描述

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

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

相关文章

【Unity小技巧】可靠的相机抖动及如何同时处理多个震动

文章目录 每篇一句前言安装虚拟相机虚拟相机震动测试代码控制震动清除震动控制震动的幅度和时间 两个不同的强弱震动同时发生源码完结 每篇一句 围在城里的人想逃出来,站在城外的人想冲进去,婚姻也罢,事业也罢,人生的欲望大都如此…

【开源】基于SpringBoot的森林火灾预警系统的设计和实现

目录 一、摘要1.1 项目介绍1.2 项目录屏 二、功能模块2.1 数据中心模块2.2 系统基础模块2.3 烟雾传感器模块2.4 温度传感器模块2.5 历史记录模块2.6 园区数据模块 三、系统设计3.1 用例设计3.1.1 森林园区基础系统用例设计3.1.2 森林预警数据用例设计 3.2 数据库设计3.2.1 烟雾…

LibreOffice编辑excel文档如何在单元格中输入手动换行符

用WPS编辑excel文档的时候,要在单元格中输入手动换行符,可以先按住Alt键,然后回车。 而用LibreOffice编辑excel文档,要在单元格中输入手动换行符,可以先按住Ctrl键,然后回车。例如:

【JVM】字节码文件的组成部分

🐌个人主页: 🐌 叶落闲庭 💨我的专栏:💨 c语言 数据结构 javaEE 操作系统 Redis 石可破也,而不可夺坚;丹可磨也,而不可夺赤。 JVM 一、字节码文件的组成部分1.1 iconst_0…

【ARMv8 SIMD和浮点指令编程】NEON 存储指令——如何将数据从寄存器存储到内存?

和加载指令一样,NEON 有一系列的存储指令。比如 ST1、ST2、ST3、ST4。 1 ST1 (multiple structures) 从一个、两个、三个或四个寄存器存储多个单元素结构。该指令将元素从一个、两个、三个或四个 SIMD&FP 寄存器存储到内存,无需交错。每个寄存器的每个元素都被存储。 …

Flutter笔记:完全基于Flutter绘图技术绘制一个精美的Dash图标(中)

Flutter笔记 完全基于Flutter绘图技术绘制一个精美的Dart语言吉祥物Dash(中) 作者:李俊才 (jcLee95):https://blog.csdn.net/qq_28550263 邮箱 :291148484163.com 本文地址:https://…

红队专题-从零开始VC++C/S远程控制软件RAT-MFC-屏幕监控

红队专题 招募六边形战士队员[24]屏幕监控-(1)屏幕查看与控制技术的讲解图像压缩算法图像数据转换其他 [25]---屏幕监控(2)查看屏幕的实现 招募六边形战士队员 一起学习 代码审计、安全开发、web攻防、逆向等。。。 私信联系 [24]屏幕监控-(1)屏幕查看与控制技术的讲解 屏幕…

Java之数据类型与变量

目录 1. 字面常量 2. 数据类型 3. 变量 3.1 变量概念 3.2 语法格式 3.3 整型变量 3.3.1 整型变量 3.3.2 长整型变量 3.3.3 短整型变量 3.3.4 字节型变量 3.4 浮点型变量 3.4.1 双精度浮点型 3.4.2 单精度浮点型 3.5 字符型变量 3.6 布尔型变量 3.7 类型转换 3.7…

0基础学习PyFlink——用户自定义函数之UDTAF

大纲 UDTAFTableAggregateFunction的实现累加器定义创建累加 返回类型计算 完整代码 在前面几篇文章中,我们分别介绍了UDF、UDTF和UDAF这三种用户自定义函数。本节我们将介绍最后一种函数:UDTAF——用户自定义表值聚合函数。 UDTAF UDTAF函数即具备了…

如何查看多开的逍遥模拟器的adb连接端口号

逍遥模拟器默认端口号为:21503。 不过,使用多开器多开的时候,端口就不一定是21503了。 如何查看? 进入G:\xiaoyao\Microvirt\MEmu\MemuHyperv VMs路径中 每多开一个模拟器,就会多出一个文件夹。 进入你要查找端口号…

分享一个基于asp.net的供销社农产品商品销售系统的设计与实现(源码调试 lw开题报告ppt)

💕💕作者:计算机源码社 💕💕个人简介:本人七年开发经验,擅长Java、Python、PHP、.NET、微信小程序、爬虫、大数据等,大家有这一块的问题可以一起交流! 💕&…

基于jquery+html开发的json格式校验工具

json简介 JSON是一种轻量级的数据交换格式。 易于人阅读和编写。同时也易于机器解析和生成。 它基于JavaScript Programming Language, Standard ECMA-262 3rd Edition - December 1999的一个子集。 JSON采用完全独立于语言的文本格式,但是也使用了类似于C语言家族…