1.定义

中介者模式是一种行为型模式,是为了解决对象之间错综复杂的调用关系的一种设计模式,这种错综复杂的调用关系采用一个中介类来进行帮忙调用,所有的调用者只是需要关心中介者,而不需要进行互相依赖。

例如张三是一个单身男人,到了谈婚论嫁的年龄,家里人都非常着急。这一天张三打开了微信附近人,准备下网捞鱼,于是他联系了小红,约好了周五见面,而由于张三怕小红放鸽子,所以也约了小黄。可是小红和小黄可是认识的闺蜜所以小红和小黄是认识的。这下周五一见面张三的渣男人设不是暴露无疑。

如此一来他们三个的关系变得错综复杂,张三可以约小红,同样小洪也能约小黄,小红由于和小黄认识所以小红也能和小黄进行互相约。而张三由于广撒网,所以也可以约小黄,同样小黄也能约张三。

如果体现在代码中就是张三和小红两个对象存在可以互相依赖,小红和小黄存在互相调用依赖,而张三和小黄也存在互相调用依赖。

为了解决这个问题,我们可以衍生出一个协调者,也就是中介者而张三谈恋爱约会的事情就交给他去处理,他来负责协调。

2.中介者模式结构图

Person是对人员信息的抽象,所以PersonZhangSan、PersonXiaoHong以及PersonXiaoHuang都继承于Person。而Mediator是中介者的抽象,ConcreteMeiator是对中介者的具体实现,所以继承于Mediator。

3.中介者模式实现

Person是对人员信息的抽象,所有人员都应该具备名字、空闲时间、是否已安排约会,所以单独进行抽象,让所有的人员具有一致性。

PersonZhangSan是对人员信息的具体实现,其中包含了基础的信息获取,实际上代码只是方便举例,才单独搞了一个人小红、小黄、张三的单独名字类。实际上都应该属于Person只是name不一样而已。

同样PersonXiaoHong也是对人员信息的具体实现,其中包含了基础的信息获取。

同样PersonXiaoHuang也是对人员信息的具体实现,其中也包含了基础的信息获取。

Mediator是对中介者的抽象,其中有两个方法,分别是registry用于保存需要协调者的实例对象,而appointment则是进行协调约会时间。

ConcreteMediator是中介者的具体实现,可以看到实现于Mediator而具体怎么收集用户信息以及怎么协调的都是在具体的中介者中进行实现的。

如果要申请约会的人的时间和收集到的用户信息中存在一致的空闲时间,那么可以约会,当然你不能自己给自己约会吧,所以要排除自己,同时如果一旦约会了就不能被别人再次邀约,所以还要判断是否为已安排约会。同时一旦匹配成功两个人都需要设置自己为已经安排约会。

现在张三可以通过中介者来协调进行约会,实际约会情况如下,可以看到由于张三和小黄是同一天有休息时间,所以他俩匹配成功进行约会。

中介者模式很像一个协调者,他的作用就是帮助协调,不再是自己去找别人,如果自己去做那么对象之间的关系就会变得十分复杂。你可以想象一下飞机的降落,飞机降落并不是飞机与飞机之间进行交互,谁可以下降到那个跑道,都是通过一个电台,他作为一个中介者进行协调。

中介者模式中登场的角色

Mediator(仲裁者、中介者)角色,用于对对象之间进行协调者,文中由Mediator扮演此角色。
ConcreteMediator(具体的仲裁者、中介者)角色,是对Mediator的具体实现,文中由ConcreteMediartor扮演此角色。
Colleague(同事),用于被中介者或仲裁者进行协调的对象,文中由Person类扮演此角色。
ConcreteColleague(具体的同事),是对Colleague的具体实现,文中由PersonZhangSan、PersonXiaoHong、PersonXiaoHuang扮演此角色。

14.设计模式--中介者模式(Mediator模式)相关推荐

  1. 【笔记整理】图解设计模式 | 第16章 Mediator模式(只有一个仲裁者)

    [笔记整理]图解设计模式 | 导航 定义 组员向仲裁者报告,仲裁者向组员下达指示. 当发生麻烦事情的时候,通知仲裁者:当发生涉及全体组员的事情时,也通知仲裁者. 当仲裁者下达指示时,组员会立即执行.团 ...

  2. 设计模式【18】——中介者模式( Mediator 模式)

    文章目录 前言 一.中介者模式( Mediator 模式) 二.具体源码 1.Colleage.h 2.Colleage.cpp 3.Mediator.h 4.Mediator.cpp 5.main. ...

  3. Mediator模式

    Mediator模式 Mediator模式是一种很有用的模式,它通过将对象间的通信封装到一个类中,将多对多的通信转化为一对多的通信,降低了系统的复杂性. 面向对象设计激励将行为分布到各个对象中,但这种 ...

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

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

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

    Mediator定义:用一个中介对象来封装一系列关于对象交互行为. 为何使用Mediator模式/中介模式 各个对象之间的交互操作非常多,每个对象的行为操作都依赖彼此对方,修改一个对象的行为,同时会涉 ...

  6. 设计模式之中介者模式---Mediator Pattern

    模式的定义 中介者模式定义如下: Define an object that encapsulates how a set of objects interact.Mediator promotes ...

  7. 设计模式(10):行为型-中介者模式(Mediator)

    设计模式(Design pattern)是一套被反复使用.多数人知晓的.经过分类编目的.代码设计经验的总结.使用设计模式是为了可重用代码.让代码更容易被他人理解.保证代码可靠性. 毫无疑问,设计模式于 ...

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

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

  9. 设计模式学习笔记——中介者(Mediator)模式

    设计模式学习笔记--中介者(Mediator)模式 @(设计模式)[设计模式, 中介者模式, Mediator] 设计模式学习笔记中介者Mediator模式 基本介绍 中介者案例 类图 实现代码 Me ...

最新文章

  1. 利用gitHook实现自动部署
  2. asp and asp.net trips
  3. 关于数据库group by需要注意
  4. c3p0数据源配置抛出Could not load driverClass com.mysql.jdbc.Driver的解决方案
  5. 在Spring Boot项目中使用Spock框架
  6. 如何将计算机专业知识和水文结合,2016水文勘测理论知识及参考答案 B卷
  7. Java-所有类型的Class对象
  8. node.js的下载和安装
  9. Hadoop入门进阶步步高(四)-测试Hadoop
  10. 数据分析报告应该包含的内容
  11. Linux 命令(106)—— chkconfig 命令
  12. jQuery 学习笔记之十 (jQuery ajax )
  13. 如何自定义IHttpModule
  14. keySet和entrySet效率比较
  15. 命令行无法运行php,php文件在命令行可以顺利运行,在浏览器上无法正常运行
  16. MATLAB实现SVM多分类(one-vs-rest),利用自带函数fitcsvm
  17. RPA - 前置机虚拟化U盾识别方案
  18. 救济金发放_通过专门的视频游戏提供癌症救济
  19. C++[POJ1849]铲雪车问题——树形DP求出树的直径
  20. linux 下 批量添加后缀名,Linux下批量修改后缀名

热门文章

  1. 第2章搭建CRM项目开发环境(搭建开发环境)
  2. Render Blobby
  3. 编程计算自然数的立方和,直到立方和大于等于10000000时为止。统计并输出实际累加的项数。
  4. 江西省电子专题大赛考点讲解四:CD4066四双向模拟开关
  5. linux 硬盘活动时间,硬盘活动分区(将磁盘分区标为活动或取消活动的方法)
  6. docker容器重启
  7. 【1087】级数求和
  8. 菜鸟Windows八大保密技巧
  9. 菜鸟也会Windows八大保密技巧
  10. 讲师加油站 | 001 | 成为培训界的C罗,这篇干货你必须get!