中介者模式是指一种用一个中介对象来封装一系列的对象交互。中介者使个对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。

适合中介者模式的情景如下:

  • 许多对象以复杂的方式交互,所导致的依赖关系使系统难以维护
  • 一个对象引用其他很多对象,导致难以复用该对象

一、中介者模式

中介者模式解决问题的思路很简单,就是通过引入一个中介对象,让其他对象只与中介对象交互,而中介对象知道如何和其他所有对象的交互,这样对象之间的交互关系就没有了,从而实现了对象之间的解耦。

具体实例:

以房屋中介功能为例,实现的功能是:

  • 租客发布租房信息到房屋中介,房屋中介将收到的信息发布给所有的房东
  • 房东发布信息到房屋中介,房屋中介将收到的信息发布给租客

(1)租客

receive() 方法用于租客接收来自中介者的信息;send() 方法用于租客向中介者发信息。

public class Renter {String account;//账号String name;Mediator me;//用户和中介者通信public void receive(String msg) {System.out.println(account + "\t" +name + "receive:");System.out.println("\t" +msg);}public void send(String msg) {me.send(this,msg);}public Renter(String account, String name, Mediator me) {this.account = account;this.name = name;this.me = me;}public String getAccount() {return account;}public String getName() {return name;}
}

(2)房东

public class Saler {String account;String name;Mediator me;public void receive(String msg) {System.out.println(account + "\t" +name + "receive:");System.out.println("\t" +msg);}public void send(String msg) {me.send(this,msg);}public Saler(String account, String name, Mediator me) {this.account = account;this.name = name;this.me = me;}public String getAccount() {return account;}public String getName() {return name;}
}

(3)中介

因为中介必须知道所有用户的信息,所以定义了租客和房东的map集合,send() 方法用于接收某一方的信息,并且向另一方的所有对象广播出去。

Set<String> set = m2.keySet();//拿到map中的key存入set集合中
public class Mediator {Map<String,Renter> m = new HashMap<>();Map<String,Saler> m2 = new HashMap<>();void addRenter(Renter r) {m.put(r.getAccount(),r);}void addSaler(Saler s) {m2.put(s.getAccount(),s);}public void send(Renter renter, String msg) {System.out.println("来自租客"+renter.account+"-"+renter.getName());System.out.println("\t"+msg);//拿到房东的set集合Set<String> set = m2.keySet();Iterator<String> iterable = set.iterator();//遍历房东set集合while (iterable.hasNext()) {String key = iterable.next(); //拿到房东的账号Saler sa = m2.get(key);//根据账号key拿到房东信息//调用房东的receive方法,将租客的信息发送给房东sa.receive(renter.getAccount()+"-"+renter.getName()+"-"+msg);}}public void send(Saler saler, String msg) {System.out.println("来自租客"+saler.account+"-"+saler.getName());System.out.println("\t"+msg);//拿到房东的set集合Set<String> set = m.keySet();Iterator<String> iterable = set.iterator();//遍历房东set集合while (iterable.hasNext()) {String key = iterable.next(); //拿到租客的账号Renter sa = m.get(key);//根据账号key拿到租客信息//调用租客的receive方法,将房东的信息发送给租客sa.receive(saler.getAccount()+"-"+saler.getName()+"-"+msg);}}
}

(4)测试类

public class Test {public static void main(String[] args) {Mediator mediator = new Mediator();//租客Renter renter1 = new Renter("1001","zhangyin",mediator);Renter renter2 = new Renter("1002","minmin",mediator);Renter renter3 = new Renter("1003","sisi",mediator);mediator.addRenter(renter1);mediator.addRenter(renter2);mediator.addRenter(renter3);//租户Saler saler1 = new Saler("2001","dongzi",mediator);Saler saler2 = new Saler("2002","haozi",mediator);Saler saler3 = new Saler("2003","xiangzi",mediator);mediator.addSaler(saler1);mediator.addSaler(saler2);mediator.addSaler(saler3);renter2.send("Minmin要租房!");System.out.println("====================================");saler2.send("浩子有房要出租!");}}

测试结果:

来自租客1002-minminMinmin要租房!
2003    xiangzi receive:1002-minmin-Minmin要租房!
2002    haozi receive:1002-minmin-Minmin要租房!
2001    dongzi receive:1002-minmin-Minmin要租房!
====================================
来自租客2002-haozi浩子有房要出租!
1003    sisi  receive:2002-haozi-浩子有房要出租!
1002    minmin  receive:2002-haozi-浩子有房要出租!
1001    zhangyin  receive:2002-haozi-浩子有房要出租!

Java设计模式(九)—— 中介者模式相关推荐

  1. Java设计模式之中介者模式(UML类图分析+代码详解)

    大家好,我是一名在算法之路上不断前进的小小程序猿!体会算法之美,领悟算法的智慧~ 希望各位博友走过路过可以给我点个免费的赞,你们的支持是我不断前进的动力!! 加油吧!未来可期!! 本文将介绍java设 ...

  2. Java 设计模式之中介者模式

    本文继续23种设计模式系列之中介者模式. 定义 用一个中介者对象封装一系列的对象交互,中介者使各对象不需要显示地相互作用,从而使耦合松散,而且可以独立地改变它们之间的交互. 角色 抽象中介者:定义好同 ...

  3. 中介者模式java_图解Java设计模式之中介者模式

    智能家庭项目 1)智能家庭包括各种设备,闹钟.咖啡机.电视机.窗帘等 2)主人要看电视时,各个设备可以协同工作,自动完成看电视的准备工作,比如流程为 :闹铃响起 - >咖啡机开始做咖啡 -> ...

  4. java设计模式之中介者模式(Mediator)

    在现实生活中,常常会出现好多对象之间存在复杂的交互关系,这种交互关系常常是"网状结构",它要求每个对象都必须知道它需要交互的对象.例如,每个人必须记住他(她)所有朋友的电话:而且, ...

  5. Java 设计模式 之 中介者模式(Mediator)

    中介者的功能非常简单,就是封装对象之间的交互. 如果一个对象的操作会引起其他相关对象的变化,或者是某个操作需要引起其他对象的后续或连带操作,而这个对象又不希望自己来处理这些关系,那么久可以找中介者,把 ...

  6. [Java]观察者模式和中介者模式改造机场

    [Java]观察者模式和中介者模式改造机场 文章目录 [Java]观察者模式和中介者模式改造机场 题目 代码部分 运行结果 补充 题目 请以下面的情景为基础,将以下的情景进行 优化: 1. 定义4个处 ...

  7. Java设计模式之行为型模式

    1 设计模式简介 软件设计模式是一套被反复使用的,多数人知晓的.经过分类编写.代码设计经验的总结.它描述了在软件设计过程中的一些不断重复发生的问题,以及该问题的解决方案,它是解决特定问题的一系列套路, ...

  8. 软件设计模式之中介者模式实验

    软件设计模式之中介者模式实验 一.实验目的 掌握软件设计模式中的中介者模式,能够用中介者模式编写程序,解决实际问题. 二.实验内容与要求 内容:有个租房中介为房主和租赁人提供租房服务,请用中介者模式对 ...

  9. 走穿java23种设计模式--18中介者模式详解

    走穿java23种设计模式–18中介者模式详解 中介者模式也称调停者模式,是一种比较简单的模式. 一.中介者模式的现实场景 蔡良因为上次表白时对方只看重他的物质方面,所以他对女朋友这个问题有点失望.因 ...

  10. 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern)

    [索引页] [源码下载] 乐在其中设计模式(C#) - 中介者模式(Mediator Pattern) 作者:webabcd 介绍 用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互 ...

最新文章

  1. python写web难受-python写web
  2. printstream_Java PrintStream clearError()方法与示例
  3. 输入输出重定向和管道
  4. 帝国cms index.php?id=调不到指定文章,帝国cms修改实现TAG标签以TAGID的方式伪静态...
  5. 【C语言】英雄联盟英雄查询系统(源码)
  6. 前端视频截图的方法canvas.drawImage()
  7. notepad++官网下载(官网无法访问的解决办法)
  8. html怎么使表格居中,html怎么使表格居中
  9. 数学英语计算机拼音,幼儿英语拼音数学早教机
  10. oracle会计工作总结,EBS 创建会计科目 小结
  11. 北通手柄连接电脑没反应_北通手柄连接电脑教程
  12. 时区是怎么划分的?世界各时区的时间如何统一表达?GMT、UTC、UNIX有什么区别?
  13. Neo4j 爬坑笔记for3.2.6
  14. 基于脉振高频电流注入的永磁同步电机无感FOC
  15. 四、RNN模型 与 NLP应用 —— Stacked RNN
  16. 《量化交易:如何建立自己的算法交易》简介及PDF电子书下载
  17. 浅谈微信小程序的功能定位和使用场景
  18. Unity选择外部图片设置头像封面功能
  19. 使用Ansible管理您的OpenStack云:第二天的操作
  20. 滴滴android wear,滴滴出行(com.sdu.didi.psnger) - 6.1.21 - 应用 - 酷安

热门文章

  1. 蓝桥杯练习题 <42点问题> 枚举法
  2. Unity2D_鼠标拖动物体移动
  3. 交换机、路由器、网关的概念和用途
  4. springboot学生综合素质测评系统java
  5. win10安装vue
  6. Mapv 结合 Leaflet 地图使用
  7. 数据挖掘的好书_数据挖掘经典书籍
  8. CAD编辑指南11:CAD转PDF以及批量打印
  9. Doxygen 注释语法和使用
  10. HTML——文本域标签(textarea)