文档章节

设计模式之中介者模式

chenxkang
 chenxkang
发布于 2017/05/04 09:56
字数 812
阅读 20
收藏 0

       中介者模式,属于行为型设计模式,主要是用来降低多个对象与类之间的通信复杂性。

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

  问题描述:如果在一个系统中对象之间的联系呈现为网状结构,对象之间存在大量的多对多的联系,将导致系统非常复杂,对象与对象之间互相影响,这样直接耦合的关系将会导致系统的过度耦合。

  解决方案:可以将系统的网状结构变成以中介者为中心的星形结构,让对象与对象之间不再直接联系,而是通过这个中介者对象与另一个对象发生相互作用。

  结构图

  举个例子:讲一个同事之间工作交流的故事。。。

  我们通过一个中介者来实现:1. 一个同事向另一个同事发送任务;2.一个同事向所有其他同事发送消息。

  1. 新建一个抽象中介者Mediator,它是一个抽象类。代码如下:

         

  2. 分别新建两个具体抽象中介类ConcreteMediator01和ConcreteMediator02,均继承抽象中介者类Mediator。代码如下:

  

  具体抽象中介类ConcreteMediator02雷同,略。

  3. 新建一个抽象同事类Colleague,它也是一个抽象类。代码如下:

         

  4. 分别新建三个具体同事类,均继承抽象同事类Colleague。代码如下:

         

  其他具体同事类雷同,略。

  5. 功能一:一个同事向另一个同事发送任务。代码如下:

         

  6. 功能二:一个同事向所有其他同事发送消息。代码如下:

         

  7. 运行后的效果,如图所示:

         

  综上,中介者模式将一个网状结构变成一个以中介者对象为中心的星形结构,在这个星形结构中,使用中介者对象与其他对象的一对多关系来取代原有对象之间的多对多关系。

  优点

  1. 简化了对象之间的交互。

  2. 将各个同事对象解耦,无论是改变还是新增一个同事类或中介者都比较方便。

  3. 减少子类生成,各个同事类可被重用。

  缺点:在具体中介者类中包含了大量同事之间的交互细节,可能会导致具体中介者类非常复杂,使得系统难以维护。

  适用场景

  1. 一个对象要和很多对象进行直接的通信,导致难以复用该对象。

  2. 系统中存在对象之间的多对多的关系;

  3. 想通过一个中间类来封装多个类中的行为,而又不想生成太多子类。

© 著作权归作者所有

共有 人打赏支持
chenxkang
粉丝 1
博文 20
码字总数 19128
作品 0
杭州
程序员
私信 提问

暂无文章

协议简史:如何学习网络协议?

大学时,学到网络协议的7层模型时,老师教了大家一个顺口溜:物数网传会表应。并说这是重点,年年必考,5分的题目摆在这里,你们爱背不背。 考试的时候,果然遇到这个问题,搜索枯肠,只能想...

Java干货分享
13分钟前
1
0
集合练习

package package1;import java.util.ArrayList;import java.util.Collection;import java.util.HashMap;import java.util.List;import java.util.ListIterator;import java.ut......

小橙子的曼曼
16分钟前
0
0
雷军亲自打造的套餐了解下:用多少付多少

12月28日消息,小米科技创始人兼CEO雷军微博表示,小米移动任我行套餐方案,原则上就是明明白白消费,用多少付多少,不用不花钱!上网、电话和短信都是一毛钱,上网0.1元/M,电话0.1元/分钟,...

linux-tao
38分钟前
1
0
在 Ubuntu 上为 CentOS 编译 Rust 程序

现在 CentOS 8 还没出来,最新的是 CentOS 7.6,上面搭载的 glibc 版本是 2.17,都已经是 2012 年那时候的版本了。 现在开发者比较常用的桌面 Linux 系统,比如 Ubuntu / Debian / Mint / A...

helloclia
48分钟前
11
0
Android Multimedia框架总结(一)MediaPlayer介绍之状态图及生命周期

前言:从本篇开始,将进入Multimedia框架,包含MediaPlayer, Camera, Surface, MediaRecord, 接下来几篇都是MediaPlayer相关。同样看下Agenda如下: MediaPlayer的状态图 Idle 状态 End 状态...

天王盖地虎626
今天
2
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部