设计模式.中介者模式Mediator

定义

中介者模式(Mediator pattern) : 使用中介者模式来集中相关对象之间复杂的沟通和控制方式,使得这些对象不必相互明显引用。从而使它们可以较松散地耦合。当这些对象中的某些对象之间的相互作用发生改变时,不会立即影响到其他的一些对象之间的相互作用。从而保证这些相互作用可以彼此独立地变化。

场景

下图中有6个对象,这些对象既会影响别的对象,又会被别的对象所影响,因此常常叫做同事(Colleague)对象。这些同事对象通过彼此的相互作用形成系统的行为。从图中可以看出,当对象1改变时,除了对象3之外其他所有对象都有可能受到影响;当对象2改变时,所有对象都有可能受到影响。这就是过度耦合的系统。

通过引入中介者(Mediator),那么同事类之间的关系将变成星型结构。如下图所示,在这个星型结构中,同事对象不再通过直接的联系与另一个对象发生相互作用;相反的,它通过中介者对象与另一个对象发生相互作用。中介者对象的存在保证了对象结构上的稳定,也就是说,系统的结构不会因为新对象的引入造成大量的修改工作。

 现实中的示例: 房东,房屋中介,租客。代码中:服务和注册中心。

教科书版本

类图

 实现

详细见:com.haiwei.behavior.mediator.mediator1

public class Client {/*** @param args*/// 中介者,ColleagueA、ColleagueBpublic static void main(String[] args) {// 定义中介者ConcreteMediator mediator = new ConcreteMediator();// 定义具体同事类ColleagueA colleagueA = new ColleagueA("张三", mediator);ColleagueB colleagueB = new ColleagueB("李四", mediator);// 中介者知晓每一个具体的Colleague类mediator.setCollA(colleagueA);mediator.setCollB(colleagueB);colleagueA.contact("我是A,我要和同事B说说工作的事情");colleagueB.contact("我是B,我下午有时间,下午商量吧");}}

缺点

没有使用价值

从类图上或者从代码调用上看不出服务间的交互关系的变化,没有很好的体现中介者的思想

同事没法动态添加,新加一个同事还需要新增加一个方法和一个熟悉,违反开闭原则

调用规则已经固定,有时候你并不知道需要找谁,比如:你租房的场景,找那个房东你并不知道,知道了联系哪个房东,我要你中介干么事

实用版本

场景:租房

  1. 如果没有中介,房东需要到处粘贴出租信息 – 房东不知道 他将跟谁通信
  2. 如果没有中介,租客会挨个小区看出租信息,然后联系房东 – 租户并不知道,他联系的房东是谁,挨个遍历
  3. 引入中介,房东把信息注册给中介公司,租客去中介公司租房
  4. 中介按照租客的要求,给租客推荐房屋信息,租客看好后,中介联系房东进行看房
  5. 有的中介会给你房东的信息,然后你跟房东联系;有的中介不会给你房东的信息,他自己替你联系房东。这都是中介模式,根据实际需求定吧。

分析

  1. 角色:租客(Tenant),中介(Mediator),房东(Landlord)
  2. 中介有两个动作:房东注册房屋信息;租客根据需求获取房屋信息,也可以说中介根据租客需求寻找房屋,并联系房东
  3. 是房屋注册给中介,房东只是房屋的属性(归属)
  4. 下面代码就让中介联系房东,你自己联系房东的场景可以自己变形

类图

实现

(com.haiwei.behavior.mediator.mediator2)

	调用流程 – 替换中介者
public class Client {public static void main(String[] args) {//1. 创建房屋对象TwoRoomedHouse tow = new TwoRoomedHouse(2,new Loadlord("王二"));ThreeRoomedHouse three = new ThreeRoomedHouse(3,new Loadlord("张三"));//2.将房屋注册给房屋中介HousingIntermediary mediary = new HousingIntermediary();mediary.registedHouse(tow);mediary.registedHouse(three);//3.创建租客对象Tenant t = new Tenant(2);//4&5.房屋中介 映射 房屋并跟房东通信mediary.mapHouseAndCotactLoadlord(t.getRentHousingSize(), "你房子多少钱");}
}
	房屋信息
public abstract class House {public int size;public Loadlord landlord ;public House(int size, Loadlord landlord) {this.size = size;this.landlord = landlord;}
}
/*** 三居室*/
public class ThreeRoomedHouse extends House {public ThreeRoomedHouse(int size, Loadlord landlord) {super(size, landlord);}
}
/*** 两居室*/
public class TwoRoomedHouse extends House {public TwoRoomedHouse(int size, Loadlord landlord) {super(size, landlord);}
}
	中介者
/*** 中介者接口*/
public interface Mediator {public void registedHouse(House house);public void  mapHouseAndCotactLoadlord(Integer size,String msg);
}
/*** 房屋中介*/
public class HousingIntermediary implements Mediator {private Map<Integer,House> registedHouseMap = new HashMap<>();/*** 注册房屋*/public void registedHouse(House house) {registedHouseMap.put(house.size, house);}/*** 根据某种规则映射房屋并联系房东* 这是简单的房屋大小匹配的,实际按照各自逻辑匹配就行*/public void mapHouseAndCotactLoadlord(Integer size,String msg) {registedHouseMap.get(size).landlord.reviewMessage(msg);}
}
	房东
/*** 房东* 当然可以添加一个接口*/
public class Loadlord {private String name;public Loadlord(String name) {this.name = name;}public void reviewMessage(String msg){System.out.println("房东:"+ name + ",收到消息:"+msg);}
}

附录

暂无

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

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

相关文章

C++课程设计 房产中介管理系统(代码全)

目录表 1 需求分析**主函数&#xff1a;调用创建的各种类和方法**交易类&#xff1a;交易的实现房屋类&#xff1a;主要管理房屋信息房主信息&#xff1a;管理房屋主人的信息房主的实现&#xff1a;看房信息&#xff1a;存储有人想去实地看房的信息&#xff0c;预约等看房信息的…

房屋中介费收取标准有?详细的房屋中介费收取标准。

[摘要]如果购房者在买房的一定过程中&#xff0c;你选择找了中介&#xff0c;对购房会有便利的一方面&#xff0c;但是房屋中介费收取标准是什么呢&#xff1f;你了解房屋中介费收取标准吗&#xff1f;来了解房屋中介费收取标准吧。如果你选择了中介公司&#xff0c;可以参考条…

基于Linux操作系统的keepalived双机热备和keepalived+lvs(DR)基本配置操作

目录 keepalived双机热备 一、概述 &#xff08;一&#xff09;具体工作原理如下&#xff1a; &#xff08;二&#xff09;实验拓补 二、安装NFS、配置 1、第一台机器配置&#xff1a;NFS &#xff1a;192.168.11.101 2、更改配置文件 3、安装NFS进行目录共享 4、编辑…

应不应该收取房屋中介费用?房屋中介费用收取合理吗

[摘要]近年来不少人选择通过中介机构完成房屋买卖,那房屋中介费用是怎么收取的?房屋中介费用收取的标准是什么?交了房屋中介费用就可以安枕无忧了吗?但实际中,有一些中介机构的服务质量和效果良莠不齐,购房的情况也是千变万化,导致纠纷不断。 近年来不少人选择通过中介机构完…

基于NodeJS+VUE房屋中介管理系统的设计与实现

当今社会房屋租赁买卖是必不可少的&#xff0c;人们不管走到哪里都需要有一个温馨的家&#xff0c;有一个落脚之地&#xff0c;所以房屋租赁市场也是非常火爆&#xff01;不管是房屋中介公司或者是个人都需要一套完整的管理系统来掌握整个市场信息。针对这一需求&#xff0c;本…

【全源码及文档】基于Java面向对象开发的房屋中介管理系统

摘 要 现代的房产市场愈加复杂化&#xff0c;用软件来管理房产中介管理系统的开发与设计及自动匹配等功能&#xff0c;在实际运用中起到极大的帮助作用。 随着房地产业的飞速发展&#xff0c;待交易房屋的数量大幅度提高&#xff0c;传统手工处理为主的房屋管理方式存在着工作…

[附源码]计算机毕业设计JAVA房屋中介管理系统

[附源码]计算机毕业设计JAVA房屋中介管理系统 项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybati…

[附源码]java毕业设计房屋中介管理系统

项目运行 环境配置&#xff1a; Jdk1.8 Tomcat7.0 Mysql HBuilderX&#xff08;Webstorm也行&#xff09; Eclispe&#xff08;IntelliJ IDEA,Eclispe,MyEclispe,Sts都支持&#xff09;。 项目技术&#xff1a; SSM mybatis Maven Vue 等等组成&#xff0c;B/S模式 M…

【河北建筑工程学院毕业论文】房屋中介公司网站的设计与实现

摘 要 随着计算机行业的不断发展&#xff0c;计算机的应用也随着行业发展的速度而不断更新。如今&#xff0c;在网络应用非常广泛的社会中&#xff0c;房屋中介公司的网站功能要求更加严格&#xff0c;所以一个好的系统对于房屋中介公司的网站来说非常重要。 本文详细介绍了房…

帝国CMS仿管理资源吧资料下载网站模板源码/下载会员+积分付费下载功能自动采集资源网站源码

帝国CMS仿管理资源吧资料下载网站模板源码&#xff0c;带下载会员积分付费下载功能自动采集资源网站源码&#xff0c;管理资源吧——为中小企业管理者提供全方位的管理资料下载服务&#xff1b;是一个所有资料免费下载&#xff0c;免注册、免登陆、免积分的公益性的管理知识共享…

pycharm 右键运行代码时总是测试模式运行(run pytest)

*# 问题 使用pycharm时&#xff0c;右键运行代码&#xff0c;结果是这样的&#xff1a; 运行_‘pytesr(xxx.py 内)’ 英语界面可能是这样&#xff1a;run_‘pytesr(xxx.py)’我并不想使用测试模式。如何改回正常模式&#xff1f; 解决办法 本着遇到什么问题就搜什么问题的态…

Nanoprobes艾美捷氟纳米金 结合物

Nanoprobes艾美捷荧光标签纳米金-共价键合&#xff0c;让你的目标在几乎任何显微镜下都可见&#xff01; 像以前一样查看目标的荧光标签再加上光学显微镜上的纳米金标签&#xff0c;甚至是EM共焦、光学显微镜和EM之间的相关性&#xff1a; 1.可方便地与二级抗体&#xff08;或…

MAL-Gold Nanoparticle/Au nanoparticles纳米金颗粒/金纳米粒子|50nm浓度:0.5mg/ml

MAL-Gold Nanoparticle/Au nanoparticles纳米金颗粒/金纳米粒子|50nm浓度&#xff1a;0.5mg/ml 别称&#xff1a;MAL-Gold Nanoparticle/Au nanoparticles纳米金颗粒/金纳米粒子 【成分】金纳米颗粒、超纯水 【性状】金纳米颗粒的水溶液随粒径不同呈现橙红、红、紫红等颜色 …

介孔二氧化硅包裹超顺磁性Fe3O4纳米颗粒表面氨基修饰|齐岳生物

介孔二氧化硅包裹超顺磁性Fe3O4纳米颗粒表面氨基修饰|齐岳生物 由于纳米四氧化三铁&#xff08;VK-EF01, VK-EF02&#xff09; 特殊的理化学性质, 使其在实际应用中越来越广泛, 其制备方法和性质的研究也得到了深入的进展。 磁性纳米微粒的制备方法主要有物理方法和化学方法。…

金纳米颗粒修饰二氧化硅纳米片AuNPs-SiO2,金纳米棒表面包覆薄纳米二氧化硅

产品名称&#xff1a;金纳米颗粒修饰二氧化硅纳米片AuNPs-SiO2&#xff0c;金纳米棒表面包覆薄纳米二氧化硅 产地&#xff1a;西安 规格&#xff1a;1mg 5mg 10mg 纯度&#xff1a;99% 金纳米棒表面包覆薄纳米二氧化硅是一种在纳米技术领域中常见的复合材料。让我为您解释一…

异形双柱体阵列纳米粒:针状/花状纳米粒子/纳米金星/金笼/金壳/三角形纳米金

今天瑞禧生物小编给大家分享的内容是异形双柱体阵列纳米粒&#xff1a;针状/花状纳米粒子/纳米金星/金笼/金壳/三角形纳米金的相关内容&#xff0c;和小编一起来看&#xff01; 在磁性材料方面有许多应用&#xff0c;例如&#xff1a;可以用纳米粒子作为永久磁体材料&#xff0…

共聚物/化合物/聚合物纳米胶束/官能团修饰二氧化硅纳米颗粒

小编这里给大家整理了共聚物/化合物/聚合物纳米胶束/官能团修饰二氧化硅纳米颗粒的应用&#xff0c;来看&#xff01; 共聚物修饰二氧化硅纳米粒子的应用&#xff1a; 介孔二氧化硅纳米粒子(MSNs)作为药物载体在生物医学方面的潜在应用价值吸引了越来越多的关注.MSNs具有均一的…

DNA纳米机器二氧化硅纳米微球信号肽/哑铃型磁金纳米复合材料Au-Fe3O4

小编给大家整理分享了DNA纳米机器二氧化硅纳米微球信号肽/哑铃型磁金纳米复合材料Au-Fe3O4的相关制备&#xff0c;和小编一起来看&#xff01; 哑铃型磁金纳米复合材料Au-Fe3O4的制备与研究&#xff1a; 以金纳米粒为种子采取外延氧化生长氧化铁的方式,制备了哑铃型磁金纳米复…

RNA修饰技术介绍|介孔二氧化硅纳米颗粒(MSN)搭载的微小RNA-24(miR-24)纳米载体复合物

RNA修饰技术介绍|介孔二氧化硅纳米颗粒(MSN)搭载的微小RNA-24(miR-24)纳米载体复合物 核糖核酸&#xff08;英语&#xff1a;ribonucleicacid&#xff0c;缩写&#xff1a;RNA&#xff09;&#xff0c;是一类由核糖核苷酸通过3,5-磷酸二酯键聚合而成的线性大分子[1]。自然界中…

微纳加工技术_单晶硅制备

文章目录 器件制备主要步骤单晶&#xff0c;多晶&#xff0c;非晶单晶硅的介绍单晶硅的制备从硅棒到硅片 器件制备主要步骤 FETMOS 截面图 单晶&#xff0c;多晶&#xff0c;非晶 单晶&#xff1a;短程有序&#xff0c;长程有序&#xff1b; 多晶&#xff1a;短程有序&#…