定义
    中介者模式( Mediator Pattern)属于行为型模式;中介者包装了一系列对象相互作用的方式,使得这些对象不必显式的相互作用,从而使它们可以松散耦合,而且可以独立地改变它们之间的交互。

    使用场景

    • 对象间的交互 操作很多,且每个对象的行为操作都依赖彼此时,为了防止在修改一个对象的行为时,同时涉及修改很多其它对象的行为
    • 中介者模式将对象之间的多对多关系,变成中介者与这些对象的一对多关系,降低系统复杂性,提高扩展性。
    • 多个类相互耦合,形成了网状结构。使用中介者模式之后将网状结构分离为星型结构。

    image.png
    image.png

    UML
    image.png

    从生活中例子自然知道,中介者模式设计两个具体对象,一个是用户类(同事类),另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:

    Mediator: 抽象中介者角色
    ConcreteMediator: 具体中介者角色
    Colleague: 抽象同事类
    ConcreteColleague: 具体同事类
    中介者类是起到协调各个对象的作用,而抽象中介者角色中则需要保存各个对象的引用。

    Android 源码中的命名相当规范,所以我们要找中介者模式,只要在源码中搜索 「Mediator」, 其中就有一个 KeyguardViewMediator

    1. public class KeyguardViewMediator extends SystemUI {
    2. private AlarmManager mAlarmManager;
    3. private AudioManager mAudioManager;
    4. private StatusBarManager mStatusBarManager;
    5. ....
    6. }
    • KeyguardViewMediator 是锁屏业务的中介者;
    • 里面的各种 XXManager 是“同事类”

    总结

    • 优点:减少多个类之间的联系,使之逻辑变清晰,松耦合
    • 缺点:类太多时中介者可能太庞大(考虑拆分多个中介者);类之间的联系本身不复杂时,加入中介者可能使逻辑结构反而变得复杂。

    链接:中介者模式