1. 定义
又称:调解者/调停者模式
包装了一系列对象相互作用的方式,用来降低这些对象之间的通信复杂性,从中协调充当牵线搭桥的作用
2. 使用场景
系统中对象之间存在比较复杂的引用关系,导致它们之间的依赖关系结构混乱,而且难以复用该对象
想通过一个中间类来封装多个类中的行为,而又不想生成太多的子类
3. 优缺点
优点:
使得这些对象不必相互明显作用,从而实现松耦合
当某些对象之间的作用发生改变时,不会影响其他对象,保证独立变化
将多对多的相互作用转化为一对多的相互作用,由复杂的网状结构变为以中介者为中心的星型结构
缺点:中介者会庞大,变得复杂难以维护
4. Android源码中的使用
Android的锁屏(Keyguard)是一个非常重要的模块。包含的功能有:解锁(指纹、图案、PIN等)、锁屏通知显示、快速启动相机、快速拨号、显示日期/时间等。其中KeyguardViewMediator是整个待机解/锁屏业务的调度器,负责调度锁屏界面的相关动作及查询解锁屏状态,其中包含了许多XXXManager的管理器成员变量,如AlarmManager,StatusBarManager,PowerManager等,KeyguardViewMediator则是充当中介者协调这些管理器的状态改变
Binder机制中ServiceManager和Binder Driver充当中介者,协调服务端与客户端
5. 实例演示
以电脑播放CD为例,主板作为中介者,协调cpu,内存,显卡,声卡,光驱等模块,这些模块间等通信都是通过主板进行等,对其中任何一个进行更改(如升级换新)都不会影响到其他模块,只需要调整其与主板间到连接即可,主板再通知其他模块作出相应调整
1. 首先创建一个中介者基类
2. 创建主板类
3. 创建一个模块基类,相当于实际中各模块与主板连接的硬件接口协议或软件驱动协议,这些都是有统一标准的
4. 各模块的实现类,CPU,光驱,声卡,显卡等, 从代码中可以看到,各模块只负责自己职责范围的工作,将处理结果通知给主板,由主板来协调下一步需要做什么,模块间实现解耦
5创建实例,完成播放CD的流程
上面执行cd播放的具体流程如下:
光驱调用load()方法读取cd,读取完成后通知主板-->主板收到通知后,将光驱读取到的数据传给cpu去解码-->cpu解析数据,解析完成后通知主板-->主板收到通知后,将cpu解码出的音视频流传给声卡, 显卡播放-->声卡显卡播放音视频, 至此就完成来cd的播放
我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章
网友评论