文档章节

设计模式之中介者模式

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
杭州
程序员

暂无文章

设计模式之 明确责任 观察者模式 状态模式 责任链模式

观察者模式是任务分发的一种模式。 如果认为我们设计的系统的各个模块(或子系统)的最终目的是完成共同任务,那么这个任务如何分配到多个模块的就是我们遇到的第一个问题。简单设计场合我们...

backbye
27分钟前
2
0
14-利用思维导图梳理JavaSE-大汇总

14-利用思维导图梳理JavaSE-Java基础知识大汇总 主要内容 1.对象入门 2.一切都是对象 3.程序流程控制 4.初始化和消除 5.权限访问控制 6.复用类 7.多态 8.接口与抽象类 9.内部类 10.容器 11.异...

飞鱼说编程
今天
6
0
利用Lombok编写优雅的spring依赖注入代码,去掉繁人的@Autowired

大家平时使用spring依赖注入,都是怎么写的? @Servicepublic class OrderService { @Autowired private UserService userService;} 是不是很熟悉的感觉?但是呢 如果你用...

HeyS1
今天
30
0
IBATIS 写BLOB字段遇到的问题

1、 首先遇到的配置问题,通过设置typeHandler 来支持写入。接下来由此引出了事务的问题。 <typeHandler jdbcType="BLOB" javaType="[B" callback="org.springframework.orm.ibatis.support....

echo-neo
今天
1
0
37. Sudoku Solver

Description tags: backtrack,hash table difficulty: hard Write a program to solve a Sudoku puzzle by filling the empty cells.A sudoku solution must satisfy all of the following......

52iSilence7
今天
1
0

没有更多内容

加载失败,请刷新页面

加载更多

返回顶部
顶部