Java 设计模式——中介者模式(行为型设计模式)

简介

中介者模式(Mediator Pattern),定义了一个中介对象来封装一系列对象之间的交互关系。中介者使各个对象之间不需要显式地相互引用,从而使耦合性降低,而且可以独立地改变它们之间的交互行为,属于行为型模式。
其主要的目的是用来降低多个对象和类之间的通信复杂性。

简单的来说就是提供一个平台。比如生活中我们经常用到的聊天软件QQ、微信群,或者是上网购物的网站淘宝、京东,又或者是房产中介。但是无论是QQ群,还是房产中介,他们都是充当一个中间平台的作用,我们可以直接通过这个平台得到我们想要的信息,避免了独自获取花费的成本。

角色

中介者模式主要由这四个角色组成, 抽象中介者(Mediator)、具体中介者(ConcreteMediator)、 抽象同事类(Colleague)和具体同事类(ConcreteColleague) 。

  • 抽象中介者(Mediator): 定义了同事对象到中介者对象之间的接口。
  • 具体中介者(ConcreteMediator): 实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从 具体的同事类那里接收信息,并且向具体的同事类发送信息。
  • 抽象同事类(Colleague): 定义了中介者对象的接口,它只知道中介者而不知道其他的同事对象。
  • 具体同事类(ConcreteColleague) : 每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者。

示例图如下:
在这里插入图片描述

代码

这里为了方便理解,我们使用一个简单的示例来加以说明。
xuwujing创建了一个Java的QQ群,并邀请了很多人进来,其中张三也加进来了,进群之后,大家开始互相打招呼进行交流。。。
那么我们便可以根据这个简单的例子来使用中介者模式进行开发。
首先依旧定义一个抽象的中介者,就是QQ群,可以进行交流;然后再定义一个抽象的同事类,可以谈话。
那么这个抽象类的代码如下:


interface QQqun {
   void exchange(Person person,String message);
}

abstract class Person{
   protected String name;
   protected QQqun qun;  
   Person(String name,QQqun qun){
       this.name = name;
       this.qun = qun;
   }
}

定义好该抽象类之后,我们再来定义具体的同事类,也就是xuwujing和张三,可以进行交流。

那么代码如下:

class ZhangSan extends Person{

   ZhangSan(String name, QQqun qun) {
   	super(name, qun);
   }
   
    void exchange(String message){
   	qun.exchange(this,message);
   }
   
    void talk(String message){
       System.out.println(name +"说:" + message);
   }
}

class XuWuJing extends Person{

   XuWuJing(String name, QQqun qun) {
   	super(name, qun);
   }
   
    void exchange(String message){
   	qun.exchange(this,message);
   }
   
    void talk(String message){
       System.out.println(name +"回应:" + message);
   }
}



最后再来定义具体中介者对象,这个QQ群的具体实现。
代码如下:

class JavaQQqun implements QQqun{
    private ZhangSan zs;
    private XuWuJing xwj;

    public ZhangSan getZs() {
		return zs;
	}

	public void setZs(ZhangSan zs) {
		this.zs = zs;
	}

	public XuWuJing getXwj() {
		return xwj;
	}


	public void setXwj(XuWuJing xwj) {
		this.xwj = xwj;
	}


	@Override
	public void exchange(Person person, String message) {
			if(zs.equals(person)){
				zs.talk(message);
			}else if(xwj.equals(person)){
				xwj.talk(message);
			}
	}
}


最后再来进行测试,定义好交流平台以及需要交流的人员。
那么测试代码如下:


public static void main(String[] args) {
    JavaQQqun jq = new JavaQQqun();  
   	ZhangSan zs = new ZhangSan("张三", jq);
   	XuWuJing xwj = new XuWuJing("xuwujing", jq);
   	jq.setZs(zs);
   	jq.setXwj(xwj);      
   	zs.exchange("大家好!我是张三!");
   	xwj.exchange("欢迎你!张三!");

}


输出结果:
张三说:大家好!我是张三
xuwujing回应:欢迎你!张三!

总结

中介者模式优点:
灵活性高,因为将同事类进行了解耦,使其不必有关联性;
降低了类的复杂度,将一对多转化成了一对一;

中介者模式缺点:
中介者使用过多,会使系统变得复杂难以维护;

使用场景:
通过一个中间类来封装多个类中的行为,而又不想生成太多的子类

注意事项:
若不明确各个类的职责,那么就不要进行使用!

和外观模式、代理模式比较
中介者模式和外观模式、代理模式比较类似,但是又有不同。
和外观模式比较,中介者模式中,同事类必须依赖与中介者,中介者也知道同事类;但是外观模式中,子系统是不需要知道外观类的存在,并且子系统是可以脱离外观模式的。
和代理模式,代理模式的核心就是代理作用,主要还是对原先的类进行扩展或增加控制,比如进行权限控制;而中介者模式主要目的是为了减少对象之前的耦合,也就是同事类直接相互独立,互不影响。

参考文章:https://www.cnblogs.com/xuwujing/p/9911997.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
资源名称:___开单大师学习版4.0.4__ 资源分:___PHP源码→办公管理___ 授权方式:___免费开源___ 界面语言:___简体中文___ 文件大小:___30.5MB(30509KB))___ 更新时间:___2021年12月8日___ 资源:___国产软件___ 平台环境:___(软件)win all/___(源码)php+mysql___ 作者主页:__http://www.kaidandashi.com/__ 演示地址:__http://demo.kaidandashi.com/__ 官方下载链接: 百度网盘:https://pan.baidu.com/s/1agEzjmJn7_TbDMAr-WFw7w 提取码:kdds 本地下载1:http://www.kaidandashi.com/fczjerp/kddsxxb.zip 本地下载2:http://www.kaidandashi.com/fczjerp/开单大师学习版.zip 详细介绍: 软件简介: 首家100%开源可定制的房产中介ERP管理系统,手机、电脑、微信、Pad同步使用,内网、外网高级结合,四网合一、一站同步、提高工作效率、安全可靠、操作简单。 详细介绍: 开源可定制房产中介 ERP 解决方案: 开单大师是全国首家提供房产管理系统和房屋管理系统源代码的服务商,系统拥有功能完善的房源客源管理,同时提供完备的办公、财务、决策分析方案,内外一体全面打通。 开单大师100%开放的源代码,您可以自由掌控,定制开发属于您的专属功能。无店面和用户数限制,一次买断,永久使用。安全掌控您的软件服务器,隐私数据自己掌控。开单大师,为每家中介提供真正属于自己的房产中介管理系统。 整合微信平台:借力微信,快速分享。 开单大师内网管理ERP:功能全面,适合不同运营需求。 房客源管理:内外网同步,一站打通。 一体化外网同步设计思想:开单大师房产管理系统平台上搭建全部业务模块,不论是标准产品还是个性研发都遵循规范要求,包括取数规则,交互方式,界面样式和美工风格都全部有统一化标准。 产品特色: 技术方案成熟稳定,支持各房产中介业务场景,开单大师房产管理系统平台集成内外网平台应用系统,帮您一站式快速搭建专属的房产中介平台。 房源管理:开单大师支持网络多门店,多人联网系统工作。中介网站无缝集成和微站无缝集成,提升中介门店服务能力,更高效。 权限和设置:各种角色和权限设置,不限门店,员工数量。可灵活设置每一位经纪人的权限,认证机器,可限制经纪人只能在门店内电脑登录。 全新智能激励辅助运营:根据个人业务动作所占成交比例预知业绩金额,发挥经纪人主观能动性,加速成交进程! 移动端应用:特色移动端应用,方便快捷查询管理。实时数据更新,事件准时提示。让您随心掌握,想改就改。 微信分享:经纪人可对自己的订单进行评价和分享,也可在微商城、圈子等多频道进行分享。 强大的财务报表分析中心:大数据智能分析业绩数据,了解业绩走势。门店损益状况一目了然,让门店运营状况尽在您的眼中! 在线客服:经纪人与客户随时沟通,轻松解决客户疑问,不在受疑难杂症的烦恼。 三大日志辅助运营:三大日志相辅相成,让一切尽在掌握,为您的数据安全提供优质的保护。 定制开发:开单大师为不同的要求,提供最适合的定制化解决方案。 除了以上特性,开单大师还用心为您准备了更多的贴心功能等待您的发现…… 常见问题: 1、开源可定制是什么意思 软件代码开放,懂技术的可以自己调整或者新增功能,如果自己对技术不太懂可以联系我们公司给您定制您需要的功能 2、开单大师只能用于房产吗 目前开单大师只针对写字楼、商铺、二手房、新楼盘、新房分销等做了不同的版本,包括运营版也是针对房产中介开发的,不过如果您需要其他行业的软件我们也可以给您定制开发 3、开单大师如何安装 解压压缩包后有一个名为开单大师4.0.4学习版的文件夹,打开文件夹中的4.0.4使用说明,里面有详细的安装步骤 更新日志: 1、优化了房源开盘日志列表查询。 2、优化了客源列表的查询功能 3、优化了用户通讯录的搜索功能 4、新增了选项配置中的房屋选项

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

不能吃辣的JAVA程序猿

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值