意图: 用一个中介对象来封装一系列对象交互。中介者使各对象不需要显示的引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
动机:在软件构建过程中,经常会出现多个对象互相关联交互的情况,对象之间常常会维持一种复杂的引用关系,如果入到一些需求的更改,这种直接的引用关系将面临不断的变化。在这种情况下,我们可以使用一个“中介对象”来管理对象间的关联关系,避免相互交互的对象之间的紧耦合引用关系,从而更好地抵御变化。
适用性:
一组对象以定义良好但复杂的方式进行通信,产生的相互依赖关系结构混乱且难以理解
一个对象引用其他很多对象并且直接与这些对象通信,导致难以复用该对象
3.想定制一个分部在许多个类中的行为,而又不想生成太多的子类
结构:
参与者:
Mediator:中介者定义一个接口用于与各同事对象通信
ConcreteMediator : 具体中介通过协调各同事对象实现协作行为
Colleague class: 每一个同事类都知道它的中介者对象;每一个同事对象在需要与其他同事通信的时候,与它的中介者通信。
协作:
同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现协作行为。
效果:
减少了子类生成
将各个colleague解耦
简化了协议对象
对对象如何协作进行了抽象
使控制集中化
实现:
代码示例如下:
1 |
|