目录
[显示]

1.摘要

Mediator模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在实现时需要注意Mediator对象本身的复杂度。

2. 针对问题

面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其它所有对象。
而系统设计中,这种相互连接会增加对象间的耦合度,系统将逐渐成为一个难以分割的整体,以至于对系统系统无法进行大的改动。
Mediator模式的作用便是分离“对象”与“对象之间的交互”逻辑。

3. 介绍

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

4. 实现

Mediator模式的静态图如下:

其中:
Mediator定义一个用于与各对象通信的接口(当仅有一个ConcreteMediator时可以不定义Mediator接口)。
ConcreteMediator实现具体通信逻辑并维护通信对象列表。
ConcreteColleague保存Mediator对象的引用,在需要与其他对象通信时,改为与Mediator通信。

实现ConcreteMediator时可以考虑使用Observer模式,其中Mediator为Observer,需要通信的对象是Subject。当对象状态改变时通知Mediator,Mediator将状态改变的结果通知其他对象。
另一个方法是在Mediator中定义一类接口,对象在调用接口时将自身的引用作为参数传入,这样Mediator可以知道调用的具体对象类型并做相应的处理,类似这样:

5. 特点

1、Mediator模式分离了各对象之间的协作逻辑,用Mediator和各对象间的一对多交互代替多对多交互,降低了系统的复杂度。
2、由于Mediator要维护各对象间的协作关系,所以它本身可能变成一个难以维护的复杂算法集合。

6. 相关文章

设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》