定义
中介者模式( Mediator Pattern)属于行为型模式;中介者包装了一系列对象相互作用的方式,使得这些对象不必显式的相互作用,从而使它们可以松散耦合,而且可以独立地改变它们之间的交互。
使用场景
- 对象间的交互 操作很多,且每个对象的行为操作都依赖彼此时,为了防止在修改一个对象的行为时,同时涉及修改很多其它对象的行为
- 中介者模式将对象之间的多对多关系,变成中介者与这些对象的一对多关系,降低系统复杂性,提高扩展性。
- 多个类相互耦合,形成了网状结构。使用中介者模式之后将网状结构分离为星型结构。
UML
从生活中例子自然知道,中介者模式设计两个具体对象,一个是用户类(同事类),另一个是中介者类,根据针对接口编程原则,则需要把这两类角色进行抽象,所以中介者模式中就有了4类角色,它们分别是:
Mediator: 抽象中介者角色
ConcreteMediator: 具体中介者角色
Colleague: 抽象同事类
ConcreteColleague: 具体同事类
中介者类是起到协调各个对象的作用,而抽象中介者角色中则需要保存各个对象的引用。
Android 源码中的命名相当规范,所以我们要找中介者模式,只要在源码中搜索 「Mediator」, 其中就有一个 KeyguardViewMediator
类
public class KeyguardViewMediator extends SystemUI {
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
....
}
- KeyguardViewMediator 是锁屏业务的中介者;
- 里面的各种 XXManager 是“同事类”
总结
- 优点:减少多个类之间的联系,使之逻辑变清晰,松耦合
- 缺点:类太多时中介者可能太庞大(考虑拆分多个中介者);类之间的联系本身不复杂时,加入中介者可能使逻辑结构反而变得复杂。