中介者模式

一、概述

  中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。

二、介绍

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

  中介者模式将多个类相互耦合,形成的网状结构,分离为星型结构。

关键代码:对象 Colleague 之间的通信封装到一个类中单独处理。
它主要包含如下几个角色:

  • Mediator: 抽象中介者。定义了同事对象到中介者对象之间的接口。
  • ConcreteMediator: 具体中介者。实现抽象中介者的方法,它需要知道所有的具体同事类,同时需要从具体的同事类那里接收信息,并且向具体的同事类发送信息。
  • Colleague: 抽象同事类。
  • ConcreteColleague: 具体同事类。每个具体同事类都只需要知道自己的行为即可,但是他们都需要认识中介者。

优点:

  1. 降低了类的复杂度,将一对多转化成了一对一。
  2. 各个类之间的解耦。
  3. 符合迪米特原则(一个对象应当对其他对象有尽可能少的了解)。

缺点:中介者会庞大,变得复杂难以维护。

使用场景:

  1. 系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱而且难以复用该对象。
  2. 想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类。

三、代码实现

抽象中介类

package com.designpattern.mediatorPattern;/*** 抽象中介类** @author zhongtao on 2018/12/19*/
public abstract class Mediator {public abstract void contact(String content, Colleague colleague);
}

抽象同事类

package com.designpattern.mediatorPattern;/*** 抽象同事类** @author zhongtao on 2018/12/19*/
public class Colleague {protected String name;protected Mediator mediator;public Colleague(String name, Mediator mediator) {this.name = name;this.mediator = mediator;}
}

具体同事类A和B

package com.designpattern.mediatorPattern;/*** 具体同事类A** @author zhongtao on 2018/12/19*/
public class ColleagueA extends Colleague {public ColleagueA(String name, Mediator mediator) {super(name, mediator);}public void getMessage(String message) {System.out.println("同事A:" + name + " 获取信息:" + message);}public void contact(String message) {mediator.contact(message, this);}
}/*** 具体同事类B** @author zhongtao on 2018/12/19*/
public class ColleagueB extends Colleague {public ColleagueB(String name, Mediator mediator) {super(name, mediator);}public void getMessage(String message) {System.out.println("同事B:" + name + " 获取信息:" + message);}public void contact(String message) {mediator.contact(message, this);}
}

具体中介类

package com.designpattern.mediatorPattern;/*** 具体中介类** @author zhongtao on 2018/12/19*/
public class ConcreteMediator extends Mediator {private ColleagueA colleagueA;private ColleagueB colleagueB;public ColleagueA getColleagueA() {return colleagueA;}public void setColleagueA(ColleagueA colleagueA) {this.colleagueA = colleagueA;}public ColleagueB getColleagueB() {return colleagueB;}public void setColleagueB(ColleagueB colleagueB) {this.colleagueB = colleagueB;}@Overridepublic void contact(String content, Colleague colleague) {if (colleague == colleagueA) {colleagueB.getMessage(content);} else {colleagueA.getMessage(content);}}
}

客户端 测试中介者模式

package com.designpattern.mediatorPattern;/*** 客户端 测试中介者模式** @author zhongtao on 2018/12/19*/
public class Client {public static void main(String[] args) {ConcreteMediator mediator = new ConcreteMediator();ColleagueA peter = new ColleagueA("Peter", mediator);ColleagueB lina = new ColleagueB("Lina", mediator);mediator.setColleagueA(peter);mediator.setColleagueB(lina);peter.contact("我是peter,想请lina晚上看电影");lina.contact("我是lina,可以滴");}
}

测试结果

同事B:Lina 获取信息:我是peter,想请lina晚上看电影
同事A:Peter 获取信息:我是lina,可以滴

源码地址:https://github.com/zt19994/designPattern

转载于:https://www.cnblogs.com/zt19994/p/10143697.html

中介者模式(Mediator Pattern)相关推荐

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

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

  2. java中介者模式例子_Java中介者模式(Mediator Pattern)

    本篇文章帮大家学习java中介者模式(Mediator Pattern),包含了Java中介者模式(Mediator Pattern)使用方法.操作技巧.实例演示和注意事项,有一定的学习价值,大家可以 ...

  3. PHP设计模式之中介者模式(Mediator Pattern)了解下

    咱们先来看下中介者模式(Mediator Pattern)的定义,它就是,用一个中介对象来封装一系列的对象交互,中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互, ...

  4. 7.7 中介者模式(Mediator Pattern)

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

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

    设计模式-中介者模式(Mediator Pattern) 文章目录 设计模式-中介者模式(Mediator Pattern) 一.定义 二.概念解释 三.场景 四.实现 1.类图 2.代码实现 五.总 ...

  6. 【23种设计模式】中介者模式(Mediator Pattern) .Net Core实现

    文章目录 简介 伪代码演示 简单实现 使用MediatR实现中介者模式 来源 简介 中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性.这种模式提供了一个中介类,该类 ...

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

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

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

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

  9. 设计模式之中介者模式(Mediator Pattern)

    中介者模式定义 Define an object that encapsulates how a set of objects interact. Mediator promotes loose co ...

  10. [设计模式]8. C++与中介者模式(mediator pattern)

    意图:用一个中介者对象封装一系列的对象交互.中介者使各对象不需要显式的相互引用,从而减小耦合. 原文:默默的EEer 地址:http://www.cnblogs.com/hebaichuanyeah/ ...

最新文章

  1. WebRTC框架中的硬件加速
  2. xshell virt-manager RuntimeError: could not open display
  3. 总结一下对buffer的学习体会
  4. 12岁女孩零编程经验开发系统千人用,80岁初代程序员300多天打卡学AI
  5. tfs管理java代码_使用Intellij Idea连接Team Foundation Server (TFS)实现代码版本管理
  6. [GKCTF 2021]XOR
  7. 2013年2月最后一周
  8. 使用反射处理protobuf数据结构
  9. mac 环境变量设置
  10. 控制谷歌浏览器的最大化最小化
  11. 行内元素垂直方向位置调整的一些感悟和困惑
  12. Hadoop学习记录(6)|Eclipse安装Hadoop 插件
  13. java深拷贝和浅拷贝
  14. sudo gem install cocoapods
  15. 中兴M6000 常用业务命令
  16. linux wget 安装包,linux系统下安装wget。
  17. SecureCRT 中文(附上1.解决SecureCRT乱码问题2.解决Hostname lookup failed: host not found问题)
  18. 加性高斯白噪声信道的信道容量
  19. 《The UVM Primer》——chapter3: Interface and BFM
  20. cesium添加自定义点位图片

热门文章

  1. 技术解密|阿里云多媒体 AI 团队是凭借什么拿下 CVPR2021 5冠1亚的?
  2. 深入理解领域驱动设计中的聚合
  3. 开放下载!《Rocket MQ 使用排查指南》精解100+常见问题
  4. AI小编问世!阿里智能写手核心技术首次公开!
  5. 数据复盘《糖豆人》爆火营销过程:怎么做到以小博大?
  6. 游戏编程中的数学——随机数字生成(RNG)的黑暗秘密
  7. 禁止修改varchar到int|[运维规范]
  8. Oracle数据库锁的种类及研究
  9. JAVA 中的数据结构
  10. ugly number