1、意图
用一个中介对象来封装一系列的交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互
2、适用性
(1)一组对象以定义良好但是复杂的方式进行通信。产生的相互依赖关系结构混乱且难以理解。
(2)一个对象引用其他很多对象并且直接与这些对象通信,导致难以利用该对象
(3)想定制一个分布在多个类中的行为,而又不想生成太多的子类。
3、参与者
(1)Mediator:中介者定义一个接口用于与各同事对象通信
(2)ConcreteMediator:具体中介者通过协调各同事对象实现协作行为;了解并维护它的各个同事
(3)Colleague class:每一个同事类都知道它的中介者对象;每一个同事对象在需与其他的同事通信的时候,与它的中介者通信。
4、协作
同事向一个中介者对象发送和接收请求。中介者在各同事间适当地转发请求以实现协作行为
5、效果
(1)减少了子类生成
(2)它将各Colleague解耦
(3)它简化了对象协议
(4)它对对象如何协作进行了抽象
(5)它使控制集中化