设计模式:Mediator
1.摘要
Mediator模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。在实现时需要注意Mediator对象本身的复杂度。
2. 针对问题
面向对象设计鼓励将行为分布到各个对象中。这种分布可能会导致对象间有许多连接。在最坏的情况下,每一个对象都知道其它所有对象。
而系统设计中,这种相互连接会增加对象间的耦合度,系统将逐渐成为一个难以分割的整体,以至于对系统系统无法进行大的改动。
Mediator模式的作用便是分离“对象”与“对象之间的交互”逻辑。
3. 介绍
用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
4. 实现
Mediator模式的静态图如下:
其中:
Mediator定义一个用于与各对象通信的接口(当仅有一个ConcreteMediator时可以不定义Mediator接口)。
ConcreteMediator实现具体通信逻辑并维护通信对象列表。
ConcreteColleague保存Mediator对象的引用,在需要与其他对象通信时,改为与Mediator通信。
实现ConcreteMediator时可以考虑使用Observer模式,其中Mediator为Observer,需要通信的对象是Subject。当对象状态改变时通知Mediator,Mediator将状态改变的结果通知其他对象。
另一个方法是在Mediator中定义一类接口,对象在调用接口时将自身的引用作为参数传入,这样Mediator可以知道调用的具体对象类型并做相应的处理,类似这样:
1 2 3 4 5 6 7 8 9 10 |
public class Dialog { public widgetChanged(Widget widget) { if(widget.getClass()==...) { //do something } } } |
5. 特点
1、Mediator模式分离了各对象之间的协作逻辑,用Mediator和各对象间的一对多交互代替多对多交互,降低了系统的复杂度。
2、由于Mediator要维护各对象间的协作关系,所以它本身可能变成一个难以维护的复杂算法集合。
6. 相关文章
7. 参考文章
- 《设计模式_可复用面向对象软件的基础》
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
抱歉,暂停评论。