设计模式之中介者模式 - Mediator

介绍

中介者持有多个对象的引用, 而多个对象中只持有中介者的引用,这样, 这些对象之间没有依赖关系, 对象之间的交互都是通过中介者来完成的.
以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.-------

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

推荐阅读更多精彩内容

  • 引入中介者模式 中介者模式实例 中介者模式分析 引入中介者模式 大家想象一下有十个人要共同完成一个工作,他们要互相...
    六尺帐篷阅读 1,156评论 1 3
  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,752评论 25 709
  • ¥开启¥ 【iAPP实现进入界面执行逐一显】 〖2017-08-25 15:22:14〗 《//首先开一个线程,因...
    小菜c阅读 6,591评论 0 17
  • Spring Cloud为开发人员提供了快速构建分布式系统中一些常见模式的工具(例如配置管理,服务发现,断路器,智...
    卡卡罗2017阅读 135,026评论 19 139
  • 不要再埋藏你的忧伤了 扔出来曝晒吧 去看看十六岁那年的大海 呐喊吧 把心中的愁绪撕裂出来 听听风的絮语吧 我在风中...
    更向远行阅读 107评论 0 0