中介者模式总结

1、定义

 定义一个中介者对象, 封装一系列对象的交互关系, 使得各对象不必显示的相互引用, 从而使其耦合松散, 而且可以独立的改变它们的交互

2、理解

 各对象显式地持有对方引用, 用于对象之间的交互, 交互关系形成网状结构, 不利于系统维护以及开发人员的理解. 这时可以定义一个中介者对象, 封装注册各对象的引用, 以及完成对象之间的交互操作. 同事对象之间不能直接交互, 它们之间的交互, 需要委托给中介者对象完成, 即 同事对象除了完成自己本身的操作之外, 只和中介者打交道(符合最少知识原则), 如此一来, 交互关系将由复杂的网状结构变成星型结构.  方便系统维护以及开发人员的理解. 

  关键点在于同事对象之间不能直接交互, 交互依赖于中介者完成, 中介者注册管理各同事对象的引用, 以及负责转发消息, 实现他们之间的交互

如:没有使用中介者的类图pk使用中介者的类图

 

3、中介者模式的角色

a、Mediator 抽象中介者:用于定义统一的接口, 用于各同事对象之间的交互

b、Concrete Mediator 具体中介者:具体中介者持有各同事对象的引用, 负责协调各同事对象的行为以完成协作, 因此具体中介者必须依赖具体同事对象(不符合依赖倒置原则)

c、Colleague 同事角色:每个同事角色都知道中介者对象, 而且与其他同事角色通信的时候,都通过中介者协作完成

每个同事角色都有两种行为:c1、 自发行为: 同事本身的行为, 如修改自身的状态, 与其他同事或者中介者没有任何的依赖.

c2、 依赖方法: 必须依赖中介者才能完成的行为.

4、中介者模式结构图

5、中介者模式的优缺点:

优点:1、降低了对象之间的耦合性,使得对象易于独立地被复用。2、将对象间的一对多关联转变为一对一的关联,提高系统的灵活性,使得系统易于维护和扩展。

缺点:当同事类太多时,中介者的职责将很大,它会变得复杂而庞大,以至于系统难以维护。

6、应用场景:

当有多个对象彼此间相互交互的时候,自然就会想到对象间的耦合度过高,解决办法就是封装对象间的交互行为,因此就能想到中介者模式就是干这行的。