文章目录

  • 中介者模式

中介者模式

定义: 用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显示地相互引用,从而使其耦合松散,而且可以独立地改变他们之间的交互。
结构:
抽象中介者角色:是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
具体中介者角色:实现中介者接口,定义一个list来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
抽象同事角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
具体同事类:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。
优点:
1、松散耦合
中介者模式通过把多个同时对象之间的交互封装到中介者对象里边,从而使得同事对象之间松散耦合,基本上上可以做到互补依赖。这样,同事对象就可以独立的变化和复用,而不再像以前那样牵一处而动全身。
2、集中控制交互
多个同事对象的交互,被封装在中介者对象里面集中管理,使得这些交互行为发生变化的时候,只需要修改中介者对象就可以了,如果是已经做好的系统,那么扩展中介者对象,而各个同事类不需要做修改。
3、一对多关联变为一对一的关联
没有使用中介者模式的时候,同事之间的关系通常是一对多的,引入中介者模式以后,中介者对象和同事对象的关系通常变成双向的一对一,这会让对象的关系更容易理解和实现。
缺点:
当同事类太多,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。
使用场景:
系统对象之间存在复杂的引用关系,系统结构混乱且难以理解。
当想创建一个运行于多个类之间的对象,又不想生成新的子类时。

package 中介者模式;public abstract class Mediator {public abstract void send(String message, Colleague colleague);}
package 中介者模式;public class ConcreteMediator extends Mediator {private ConcreteColleague1 colleague1;private ConcreteColleague2 colleague2;@Overridepublic void send(String message, Colleague colleague) {if (colleague == colleague1) {colleague1.notifyy(message);} else {colleague2.notifyy(message);}}public void setColleague1(ConcreteColleague1 colleague1) {this.colleague1 = colleague1;}public void setColleague2(ConcreteColleague2 colleague2) {this.colleague2 = colleague2;}}
package 中介者模式;public abstract class Colleague {protected Mediator mediator;public Colleague(Mediator mediator) {this.mediator = mediator;}}
package 中介者模式;public class ConcreteColleague1 extends Colleague {public ConcreteColleague1(Mediator mediator) {super(mediator);}public void send(String message) {mediator.send(message, this);}public void notifyy(String message) {System.out.println("同事1得到消息:" + message);}}
package 中介者模式;public class ConcreteColleague2 extends Colleague {public ConcreteColleague2(Mediator mediator) {super(mediator);}public void send(String message) {mediator.send(message, this);}public void notifyy(String message) {System.out.println("同事2得到消息:" + message);}}
package 中介者模式;public class Client {public static void main(String[] args) {ConcreteMediator concreteMediator = new ConcreteMediator();ConcreteColleague1 c1 = new ConcreteColleague1(concreteMediator);ConcreteColleague2 c2 = new ConcreteColleague2(concreteMediator);concreteMediator.setColleague1(c1);concreteMediator.setColleague2(c2);c1.send("吃饭了么");c2.send("没有呢,正准备去");}}

经典的设计模式17——中介者模式相关推荐

  1. [设计模式] 17 中介者模式 Mediator Pattern

    在GOF的<设计模式:可复用面向对象软件的基础>一书中对中介者模式是这样说的:用一个中介对象来封装一系列的对象交互.中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变 ...

  2. 设计模式(17)----中介者模式

    中介者模式 中介在现实生活中并不陌生,满大街的房屋中介.良莠不齐的出国中介--.它们的存在是因为它们能给我们的生活带来一些便利:租房.买房用不着各个小区里瞎转:出国留学也不用不知所措.中介者模式在程序 ...

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

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

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

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

  5. 设计模式(中介者模式-对象去耦)

    声明:本系列文章内容摘自<iOS设计模式> 中介者模式 用一个对象来封装一系列对象的交互方式.中介者使个对象不需要显式地相互调用,从而使其耦合松散,而且可以独立地改变它们之间的交互. 何时 ...

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

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

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

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

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

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

  9. 设计模式系列 — 中介者模式

    点赞再看,养成习惯,公众号搜一搜[一角钱技术]关注更多原创技术文章. 本文 GitHub org_hejianhui/JavaStudy 已收录,有我的系列文章. 前言 23种设计模式速记 单例(si ...

最新文章

  1. Linux进程描述符task_struct结构体简析
  2. java属性编辑器,即PropertyEditor
  3. 与容器服务 ACK 发行版的深度对话第二弹:如何借助 hybridnet 构建混合云统一网络平面
  4. ImportError: cannot import name ‘options‘ from ‘pyecharts‘
  5. ajax跨域时使得后台的sessionid不断地的变化,以及layui表格支持跨域的方法,java
  6. 2440,6410,210存储器接口比较
  7. html怎么一段时间把网页背景更换_复盛螺杆压缩机故障怎么维修?
  8. 词频统计预处理之综合练习
  9. double取两位小数_Java语言中:float、double数据类型在内存中是如何存储的
  10. 蓝桥杯 ADV-144算法提高 01背包
  11. 树莓派 之 关于用途
  12. 微信小程序连接低功率蓝牙控制单片机上硬件设备
  13. 超详细的商业智能BI知识分享,值得收藏
  14. 垂直搜索引擎的存在意义
  15. 如何使用分布是缓存Hazelcast
  16. 苹果地图副总裁_苹果高管动荡:两员大将水火不容 “地图门”是引爆点
  17. 适合新手看的安卓开发书android studio
  18. 施努卡:机器视觉光学筛选机的工作原理是什么?
  19. 基于BP神经网络预测日本麻将立直听牌
  20. 选择了便只顾风雨兼程

热门文章

  1. ant-vue通知提醒框( Notification )实现自定义样式
  2. php 上传 enctype,动态设置上传文件的enctype
  3. 2022山东大学软件学院计算机组成与课程设计(计组课设)分享防踩坑
  4. react使用lottie-web实现动画
  5. VC5-高级音频函数
  6. Python 看代码找疑难
  7. 数据收集-appium的使用
  8. md.exe无法打开解决办法
  9. exe4j打包jar成exe,实现在没JDK环境的电脑运行
  10. FreeRTOS给予裸机编程的思考