Mediator 中介者模式

Mediator 中介者模式

目录

[TOC]

1. 概述

1.1. 设计模式定义

定义一个中介对象来封装一系列对象之间的交互,使原有对象之间的耦合松散,且可以独立地改变它们之间的交互。中介者模式又叫调停模式,它是迪米特法则的典型应用。

1.2. 自我理解

这个模式就是要让各个系统之间彻底解耦,不要互相强耦合在一起,互相调用过多,调用关系过于混乱。互相调用的时候通过一个中间的组件来解耦。
在实际的企业开发中,不是这么玩儿的,很少有见到说封装一个所谓的中介者,去让各个模块之间解耦,思考这个模式的本质,让各个模块之间解耦合
最最常见的一个方式,就是系统与系统之间,不是走直接的接口调用,而是基于MQ来解耦。录入过模块A要调用模块B和模块C,模块A发送一条消息到MQ里面去,模块B和模块C去消费这条消息,读到消息之后,知道模块A要调用自己,所以就执行对应的逻辑即可。常见于系统与系统之间的调用,可以基于MQ消息,异步执行的方式来调用,不需要同步调用和执行。

1.3. 中介者的组成

抽象中介者(Mediator)角色:它是中介者的接口,提供了同事对象注册与转发同事对象信息的抽象方法。
具体中介者(ConcreteMediator)角色:实现中介者接口,定义一个 List 来管理同事对象,协调各个同事角色之间的交互关系,因此它依赖于同事角色。
抽象同事类(Colleague)角色:定义同事类的接口,保存中介者对象,提供同事对象交互的抽象方法,实现所有相互影响的同事类的公共功能。
具体同事类(Concrete Colleague)角色:是抽象同事类的实现者,当需要与其他同事对象交互时,由中介者对象负责后续的交互。

1.4. 为什么要用中介者模式

比如下面的例子,聊天系统中的用户,互相依赖,相互关联,他们之间的关系会呈现为复杂的网状结构,这是过度耦合的架构,即不利于类的附庸,也不稳定。新增一个用户,所有用户都会受到影响。

如果引入中介者模式,那么用户的结构将变成星形结构,任何一个类的变动,只会影响类的本身,以及中介者。这样就减少了系统的耦合。

2. UML

3. Example

现在我们实现一款聊天工具,实现私聊以及群聊功能。

3.1. 不用设计模式的代码实现

3.2. Mediator设计模式的代码实现

原创文章,转载请注明: 转载自LoserZhao – 诗和远方[ http://www.loserzhao.com/ ]

本文链接地址: http://www.loserzhao.com/java/designpattern/mediator-designpattern.html

文章的脚注信息由WordPress的wp-posturl插件自动生成

发表评论?

0 条评论。

发表评论


注意 - 你可以用以下 HTML tags and attributes:
<a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <cite> <code class="" title="" data-url=""> <del datetime=""> <em> <i> <q cite=""> <s> <strike> <strong> <pre class="" title="" data-url=""> <span class="" title="" data-url="">

使用新浪微博登陆