文章目录

  • 描述
    • 定义
    • 类型
    • 动机
    • UML类图
    • 时序图
  • 实现
    • 主要角色
    • 示例
  • 适用场景
  • 优点
  • 缺点
  • 相关模式

描述

定义

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

类型

对象行为型模式

动机

对象与对象之间存在大量的关联关系,这样势必会导致系统的结构变得很复杂,同时若一个对象发生改变,我们也需要跟踪与之相关联的对象,同时做出相应的处理。可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。

UML类图

时序图

实现

主要角色

  • Mediator:抽象中介者

    • 定义一个接口用于与各同事对象通信。
  • ConcreteMediator:具体中介者
    • 了解并维护各个同事的引用。
    • 通过协调各同事对象实现协作行为。
  • Colleague:抽象同事类
    • 定义各个同事类公有的方法,与中介者进行交互。
  • ConcreteColleague:具体同事类
    • 每一个同事类都维护中介者对象的引用。
    • 实现了抽象同事类中的抽象方法,与中介者通信。
  • Client:客户类
    • 创建并绑定中介者和同事对象,调用同事类方法进行交互。

示例

  • Mediator:抽象中介者

      interface Mediator {void operation(int receiver, String msg);void register(int receiver, Colleague colleague);}
    
  • ConcreteMediator:具体中介者

      public class ConcreteMediator implements Mediator {private Map<Integer, Colleague> colleagues = new HashMap<>();@overridepublic register(int receiver, Colleague colleague) {this.colleagues.put(receiver, colleague);}@overridepublic void operation(int receiver, String msg) {if (this.colleagues.containsKey(receiver)) {this.colleagues.get(receiver).sendMsg(msg);} else {System.out.println("no matched receiver!");}}}
    
  • Colleague:抽象同事类

      interface Colleague {void sendMsg(String msg);void register(Mediator mediator);}
    
  • ConcreteColleague:具体同事类

      public class ConcreteColleagueA implements Colleague {private Mediator mediator;@overridepublic register(Mediator mediator) {this.mediator = mediator;}@overridepublic void sendMsg(String msg) {mediator.operation(2, "ConcreteColleagueA send msg: " + msg);}}public class ConcreteColleagueB implements Colleague {private Mediator mediator;@overridepublic register(Mediator mediator) {this.mediator = mediator;}@overridepublic void sendMsg(String msg) {mediator.operation(1, "ConcreteColleagueB send msg: " + msg);}}
    
  • Client:客户类

      public class Client {public static void main(String[] args) {ConcreteMediator mediator = new ConcreteMediator();ConcreteColleagueA concreteColleagueA = new ConcreteColleagueA();ConcreteColleagueB concreteColleagueB = new ConcreteColleagueB();mediator.register(1, concreteColleagueA);concreteColleagueA.register(mediator);mediator.register(2, concreteColleagueB);concreteColleagueB.register(mediator);concreteColleagueA.sendMsg("to ConcreteColleagueB");concreteColleagueB.sendMsg("to concreteColleagueA");}}
    

适用场景

  • 对象间的通信方式复杂,产生的相互依赖关系结构混乱且难以理解。
  • 一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象。

优点

  • 减少了子类生成。Mediator将原本分布于多个对象间的行为集中在一起。改变这些行为只需生成Mediator的子类即可。这样各个Colleague类可被重用。
  • 将各Colleague解耦。Mediator有利于各Colleague间的松耦合。你可以独立地改变和复合各Colleague类和Mediator类,更好地符合 “开闭原则”。
  • 简化了对象协议。用Mediator和各Colleague间的一对多的交互来代替多对多的交互。一对多的关系更易于理解、维护和扩展。

缺点

  • 中介者会变得庞大且复杂,原本多个对象直接的相互依赖变成了中介者和多个同事类的依赖关系,同事类越多,中介者的逻辑就越复杂。

相关模式

  • Facade与中介者的不同之处在于它是对一个对象子系统进行抽象,从而提供了一个更为方便的接口。它的协议是单向的,即Facade对象对这个子系统类提出请求,但反之则不行。相反,Mediator提供了各Colleague对象不支持或不能支持的协作行为,而且协议是多向的。
  • Colleague可使用Observer模式与Mediator通信。

MEDIATOR(中介者)模式相关推荐

  1. [导入]C#面向对象设计模式纵横谈(17):(行为型模式) Mediator 中介者模式.zip(8.75 MB)...

    讲座内容: 本培训课程探讨GoF23之 Mediator 中介者模式的意图.动因.原理.应用场景与C#语言实现,以及该模式在.NET框架程序设计中的具体应用. 课程讲师: 李建忠 上海祝成信息科技有限 ...

  2. 设计模式笔记 16. Mediator 中介者模式(行为型模式)

    16. Mediator 中介者模式           2008-09-09 动机(Motivation) 在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关 ...

  3. C++设计模式-Mediator中介者模式

    Mediator中介者模式 作用:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互. UML如下: Colleage抽象同事 ...

  4. java mediator模式_设计模式之Mediator 中介者模式 - 解道Jdon

    设计模式目录 >> 当前页 设计模式之Mediator(中介者) 板桥里人 http://www.jdon.com 2002/05/05 Mediator中介者模式定义: 用一个中介对象来 ...

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

    目录 前言 1 定义 2 适用性 3 结构 3.1 结构图 3.2 参与者 4 应用举例--以房产中介为例 4.1 Mediator--HouseMediator 4.2 具体Mediator--Be ...

  6. 设计模式学习笔记--Mediator 中介者模式

    我们知道面向对象应用程序是由一组为了提供某种服务而彼此交互的对象组成.当彼此引用的对象数量比较少时,此时对象之间就为直接交互(点对点).而当对象的数量增加时,这种直接交互会导致对象之间复杂的.混乱的引 ...

  7. 中介者模式php,php设计模式 Mediator (中介者模式)

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

  8. 设计模式之略见一斑(Mediator中介者模式)

    设计模式 写道 通常,面向对象的软件开发要求尽可能细致地分配,从而使每个对象都能够独立完成自己的任务.Observer模式通过尽可能缩小一个对象应对其他对象承担的责任范围来支持这种责任分配.而sing ...

  9. Mediator(中介者模式)行为型

    中介者模式 一.概述 二.结构 三.实例 四.优缺点 五.适用场景 一.概述 描述:在租房时,租客需要联系中介,中介通过联系房主,构建起联系关系. 定义:用一个中介对象来封装一系列的对象交互.中介者使 ...

  10. 设计模式之中介者模式(Mediator)摘录

    23种GOF设计模式一般分为三大类:创建型模式.结构型模式.行为模式. 创建型模式抽象了实例化过程,它们帮助一个系统独立于如何创建.组合和表示它的那些对象.一个类创建型模式使用继承改变被实例化的类,而 ...

最新文章

  1. Fastreport.Net用户手册:报表页
  2. centos 6.5 安装 lamp 后mysql不能启动_Lamp的搭建--centos6.5下安装mysql
  3. 在 Linux 下打包命令 tar 和压缩命令 7z 的配合使用示例
  4. excel单元格斜线_怎么在excel中画斜线?怎么在excel表格中画斜线?
  5. 指针在c语言中的运用,怎么理解C语言中的指针,如何运用?
  6. 详解fianl,finally,finalize关键字
  7. oracle中showTime用法,ant design vue中日期选择框混合时间选择器的用法
  8. 2021-2025年中国准分子飞秒眼科激光器行业市场供需与战略研究报告
  9. 黑盒测试--等价类划分
  10. Marlin2.0.9 Configuration_adv.h详解
  11. 搜狗高速浏览器收藏夹怎么恢复 搜狗浏览器收藏夹恢复教程
  12. 硬盘数据恢复原理与方法
  13. 10543: 孤岛症候群
  14. 企业抖音蓝V怎么认证?申请流程是怎样的?需要具备哪些条件?
  15. 飞机专家调查发现坐飞机 机首、机翼和机尾最安全
  16. 线程与全局解释器锁(GIL)
  17. Directx11教程(49) stencil的应用-镜面反射
  18. 如何高效阅读技术类书籍?
  19. 陌生人社交的一路羁绊——垃圾用户
  20. PowerBuilder DeCompiler(PB DeCompiler) Demo download(PB反编译,支持5-12)

热门文章

  1. Java对于数据加密与解密的实现EncryptUtil、MD5与sha-1
  2. React Router 升级 v6: Redirect 重定向替代方案
  3. 最新版tensorflow1.12-gpu安装详细避坑(windows10 64位+anaconda+cuda+cudnn+pycharm环境配置)
  4. vb.net 教程 20-4 库存管理系统3.9 入库管理(FormStorageIn)
  5. 物化视图 materialized view
  6. 婚姻是夫妻之间相互取悦
  7. css清除浮动4种方法
  8. 笔记第一章1卫星导航定位系统简介of《卫星导航定位原理与应用》东南大学 - 高成发 教授
  9. React-Extension
  10. ​【预测模型】基于粒子群算法优化核极限学习机实现数据预测matlab代码