文档章节

小菜学设计模式——中介者模式

learn_more
 learn_more
发布于 2015/06/27 17:49
字数 1296
阅读 235
收藏 6

背景

    最近写博客的时间非常少,天天加班,项目要上线,结果关键时候人都走了,只剩下我一个,说实话,我居然从Linux部署到C++ TCP服务器、到Web服务器、页面编写走通了!!只有移动客户端没有去涉及。不说了,这篇博客也是加班时编写的,继续努力中,希望坚持把《大话设计模式》在这个礼拜看完。


1、使用意图

    把一系列对象的交互交付与中介者处理,那么可以耦合松散,使每一个对象都独立变化。


2、生活实例

    QQ群聊天,所有人都不需要知道对方的信息,只要一发言,QQ群这个中介就会把信息发送到所有的群成员。


3、Java 例子(框架、JDK 、JEE)

    《大话设计模式》的意思是说Form窗体中组件之间的通信是一个典型的中介者模式,这样理解,组件与组件之间不需要知道对方的存在关系,只要在事件监听处进行通知即可。我不知道是否理解透彻,总之觉得不是很对,因为事件监听其实也是在事件处理当中去通知另一个组件,组件与组件之间还是直接通信了,那就应该不是中介者模式。


4、模式类图

Mediator:中介者接口,声明各个同事之间相互对接的抽象方法 ,比如QQ群里的发言接口。

ConcreteMediator:具体的中介者实现对象。它需要维护所有的同事以及负责具体的协调各个同事对象的交互关系,也就是QQ群某个同事发言时应该如何通知其他同事 。

Colleague:同事类的定义,主要声明同事类的具体行为,同时,同事类中必须要要有中介者的引用,因为同事与同事之间没有任何联系,只有同事与中介者有直接联系。

ConcreteColleague:具体的同事类,实现自己的业务,需要与其他同事对象交互时,就通知中介对象,中介对象会负责后续的交互。换句话说,同事之间的交流都有中介者负责。


5、模式优点

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

    中介者模式很容易在系统中应用,也很容易在系统中误用。当系统中出现了”多对多“交互复杂的对象群时,不要急于使用中介者模式,而要先反思你的系统在设计上是否合理。

    Mediator的出现减少了各个Colleague的耦合,使得可以独立地改变和复用各个Colleague类和Mediator。当然Colleague之间的耦合度降低是因为Mediator,所以Mediator是一个经常需要维护的类;

    由于把对象如何协作进行了抽象,将中介者作为一个独立的概念并将其封装在一个对象中,这样关注的对象就从对象各自本身的行为转移到他们之间的交互上来,也就是站在一个更宏观的角度去看待系统。

    也是由于ConcreteMediator 控制了集中化,于是就把交互复杂性变为了中介者的复杂性,这就使得中介者变得比任何一个ConcreteColleague都复杂。

    中介者模式一般应用于一组对象已定义良好但是复杂的方式进行通信场合,以及想定制一个分布在多个类中的行为,而又不想生成太多的子类的场合。


6、与类似模式比较

    尽管将一个系统分割成许多对象通常可以增加其可复用性,但是对象间相互连接的激增又会降低其可复用性。

    大量的连接使得一个对象不可能在没有其他对象的支持下工作,系统表现为一个不可分割的整体,所以,对系统的行为进行任何较大的改动就十分困难。

    中介者模式就是迪米特法则(最少知识原则)的体现。

    相比观察者模式,你可能会发现二者之间挺多共同点,比如通知就是二者最大的共同点,但是二者也是截然不同的,比如观察者是主题发生变化就会立刻通知观察者做出改变,而中介者则是同事与同事之间的交流,交由中介进行通知。

    名字上中介者模式和代理模式有着关系似的,实际上真的没什么关系。


© 著作权归作者所有

learn_more
粉丝 93
博文 240
码字总数 210196
作品 0
深圳
程序员
私信 提问
《JavaScript设计模式与开发实践》原则篇(2)—— 最少知识原则

最少知识原则(LKP)说的是一个软件实体应当尽可能少地与其他实体发生相互作用。这 里的软件实体是一个广义的概念,不仅包括对象,还包括系统、类、模块、函数、变量等。 单一职责原则指导我们...

嗨呀豆豆呢
2018/12/30
0
0
《JavaScript设计模式与开发实践》模式篇(11)—— 中介者模式

中介者模式的作用就是解除对象与对象之间的紧耦合关系。增加一个中介者对象后,所有的 相关对象都通过中介者对象来通信,而不是互相引用,所以当一个对象发生改变时,只需要通知 中介者对象即...

嗨呀豆豆呢
2018/12/23
0
0
迈向大牛的重要一步——掌握设计模式

IT职场的小菜经常有这样的疑问: 为什么一个相似的功能,大牛一会儿就搞定,然后悠闲地品着下午茶逛淘宝;而自己加班加点搞到天亮还做不完。 为什么用户提出需求变更后,大牛只需潇洒地敲敲键...

一枚Sir
2015/04/10
321
0
《JavaScript设计模式与开发实践》最全知识点汇总大全

系列文章: 《JavaScript设计模式与开发实践》基础篇(1)—— this、call 和 apply 《JavaScript设计模式与开发实践》基础篇(2)—— 闭包和高阶函数 《JavaScript设计模式与开发实践》模式...

嗨呀豆豆呢
01/04
0
0
《JavaScript设计模式与开发实践》模式篇(12)—— 装饰者模式

在传统的面向对象语言中,给对象添加功能常常使用继承的方式,但是继承的方式并不灵活, 还会带来许多问题:一方面会导致超类和子类之间存在强耦合性,当超类改变时,子类也会随之 改变;另一方...

嗨呀豆豆呢
2018/12/25
0
0

没有更多内容

加载失败,请刷新页面

加载更多

64.监控平台介绍 安装zabbix 忘记admin密码

19.1 Linux监控平台介绍 19.2 zabbix监控介绍 19.3/19.4/19.6 安装zabbix 19.5 忘记Admin密码如何做 19.1 Linux监控平台介绍: 常见开源监控软件 ~1.cacti、nagios、zabbix、smokeping、ope...

oschina130111
今天
13
0
当餐饮遇上大数据,嗯真香!

之前去开了一场会,主题是「餐饮领袖新零售峰会」。认真听完了餐饮前辈和新秀们的分享,觉得获益匪浅,把脑子里的核心纪要整理了一下,今天和大家做一个简单的分享,欢迎感兴趣的小伙伴一起交...

数澜科技
今天
7
0
DNS-over-HTTPS 的下一代是 DNS ON BLOCKCHAIN

本文作者:PETER LAI ,是 Diode 的区块链工程师。在进入软件开发领域之前,他主要是在做工商管理相关工作。Peter Lai 也是一位活跃的开源贡献者。目前,他正在与 Diode 团队一起开发基于区块...

红薯
今天
9
0
CC攻击带来的危害我们该如何防御?

随着网络的发展带给我们很多的便利,但是同时也带给我们一些网站安全问题,网络攻击就是常见的网站安全问题。其中作为站长最常见的就是CC攻击,CC攻击是网络攻击方式的一种,是一种比较常见的...

云漫网络Ruan
今天
12
0
实验分析性专业硕士提纲撰写要点

为什么您需要研究论文的提纲? 首先当您进行研究时,您需要聚集许多信息和想法,研究论文提纲可以较好地组织你的想法, 了解您研究资料的流畅度和程度。确保你写作时不会错过任何重要资料以此...

论文辅导员
今天
8
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部