设计模式之中介者模式 - Mediator
2017-03-07 本文已影响18人
ahking17
介绍
中介者持有多个对象的引用, 而多个对象中只持有中介者的引用,这样, 这些对象之间没有依赖关系, 对象之间的交互都是通过中介者来完成的.
以PC为例, 主板就是中介者, CPU, 显卡, IO设备, 这些部件之间的交互都是通过主板来完成的, 这些对象之间不直接调用对方, 这样就避免了对象之间过多的依赖关系.
android 源码中的使用
屏幕解锁功能的实现, KeyguardViewMediator作为中介者, 协调几个manager之间的交互.
public class KeyguardViewMediator {
private AlarmManager mAlarmManager;
private AudioManager mAudioManager;
private StatusBarManager mStatusBarManager;
private PowerManager mPM;
}
使用场景
登录界面的实现.
登录界面中, 一般包含账户输入框, 密码输入框, 确定按钮,取消按钮, 保存密码checkbox, 自动登录checkbox, 这样6个控件.
这些控制之间的状态是互相有影响的, 例如只有当账户和密码输入框都不为空的时候, 确认按钮才是可点击的状态, 否则置灰显示.
按照之前的实现思路是, 为每个控件设置text_change_listener, text change时,根据自己的状态, 去设置其他控件的状态. 这样做,想想代码就会非常的乱.
好的解决方案是, 让Activity作为中介者, 每个控件设置自己的text_change_listener, 当text change时, 都去调用activity的change()方法.
在change()中, 统一根据各个控件的情况去设置其他控件的状态(是否置灰显示, 是否可点击), 这样就避免了各个控件直接去设置其他控件的状态.
代码会非常的整洁和好维护.
-----DONE.-------