Mediator模式用一个中介对象来封装一系列的对象交互。中介者使各对象不需要显式地相互引用,从而使其耦合松散,而且可以独立地改变它们之间的交互。
可以通过将集体行为封装在一个单独的中介者(mediator)对象中以避免这个问题。中介者负责控制和协调一组对象间的交互。中介者充当一个中介以使组中的对象不再相互显式引用。这些对象仅知道中介者, 从而减少了相互连接的数目。
类图:
Mediator模式使用双分派,具体的Mediator对象持有所有同事(Colleague)对象的引用,每个同事(Colleague)对象持有Mediator对象的引用。当一个同事(Colleague)对象发生变化,通知Mediator对象,Mediator对象根据谁发生变化,通知另外的同事(Colleague)对象。
- 每一个同事类都知道它的中介者对象。
- 每一同事对象需要与其他同事对象通信的时候,与中介者对象通信。
- 中介者定义一个接口与每个同事对象通信。
- 具体的中介者维护每个同事对象,协调各同事对象实现协作行为。
一种实现方法是使用Oberver模式,将Mediator实现为一个Oberver各Colleague作为Subject,一旦其状态改变就发送通知给Mediator。Mediator作出的响应是将状态改变的结果传播给其他的Colleague。