简要描述
中介者模式常见的定义关键字是mediator,是一种重要的设计模式,解决了多对多引用耦合,到一对多引用耦合的处理过程,某种程度上和观察者在多个观察者对应一个观察者的模式很像。
成员关系
官方定义
中介者模式(Mediator Pattern)是用来降低多个对象和类之间的通信复杂性。这种模式提供了一个中介类,该类通常处理不同类之间的通信,并支持松耦合,使代码易于维护。中介者模式属于行为型模式。
使用场景
多个对象符合的相互引用和影响,耦合太深,降低耦合,提高维护性,把多对多的关系变为一对多的关系。
在Android中的使用
具体的例子是KeyGuardViewMediator,这个类是负责锁屏控制的一个类。 在我们的开屏和锁屏的时候要注意会需要很多的控制,包括音效和状态栏,通知等,这些都对应AudioManager等具体的系统服务。所以需要一个统一的中介类来协调和控制各个管理服务的状态。
KeyGuardViewMediator包括很多成员包括各个管理器类,比如 AlarmManager和AudioManager等,这些类都是对象。
举一个过程就是,KeyGuardViewMediator的playSounds()方法就对应对AudioManager的一些列的状态控制。
其实抛开这些,我们平常的MVC开发,对应Activity和View关系就是广义的中介者模式,View是具体的Colleague类(同事类),而就是Mediator类,其中比较典型的就是onClickListener接口等回调,View都是这个接口的实例,中介者模式我们在Android开发中每时每刻都在用。
中介者模式优缺点
优点:
简化了对象之间的关系,将系统的各个对象之间的相互关系进行封装,将各个同事类解耦,使得系统变为松耦合。 提供系统的灵活性,使得各个同事对象独立而易于复用。
缺点:
中介者模式中,中介者角色承担了较多的责任,所以一旦这个中介者对象出现了问题,整个系统将会受到重大的影响。 新增加一个同事类时,不得不去修改抽象中介者类和具体中介者类,此时可以使用观察者模式和状态模式来解决这个问题。