Android设计模式-11-观察者模式

时间:2021-7-4 作者:qvyue

1. 定义

定义对象间一种一对多的依赖关系,使得每当一个对象改变状态,则所有依赖于它的对象都会得到通知并被自动更新

2. 使用场景:

关联行为,事件多级触发,跨系统的消息交换(消息队列,事件总线)等

常用于GUI系统,订阅发布系统

3. 优缺点

优点:解耦,减小依赖性,灵活,可扩展

缺点:开发和运行效率,一对多调试比较复杂,而且java中的消息通知是默认顺序执行的, 一个观察者卡顿,会影响整体的执行效率,这种情况下一般要考虑异步方式

4. Android源码中的使用

Observer,Observable是JDK中内置类型,可见观察者模式的重要性

ListView Adapter的notifyDataSetChanged,setAdapter时中会创建一个数据集的观察者AdapterDataSetObserver,而BaseAdapter中有一个被观察者 DataSetObservable,Adapter的 notifyDataSetChanged 中就是调用了 DataSetObservable 的notifyChanged方法,notifyChanged 中则是遍历了所有观察者(mObservers),并调用他们的onChanged方法

BroadcastReceiver广播的注册订阅发送,也是典型的观察者模式

EventBus,RxJava等

5. 实例演示

以程序员经常会看的极客头条的订阅为例。

下面的观察者和被观察者直接继承 JDK中内置的Observer,Observable:

1. 创建观察者,即程序员类

Android设计模式-11-观察者模式

2. 创建被观察者,即文章网站

Android设计模式-11-观察者模式

3. 创建观察者和被观察者对象,进行订阅

Android设计模式-11-观察者模式

这里只是简单的演示,要想深入了解观察者模式,可以了解一下EventBus,RxJava等一些开源框架,其中对观察者模式有很明显的体现

 我是今阳,如果想要进阶和了解更多的干货,欢迎关注公众号”今阳说“接收我的最新文章

Android设计模式-11-观察者模式
声明:本文内容由互联网用户自发贡献自行上传,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任。如果您发现有涉嫌版权的内容,欢迎发送邮件至:qvyue@qq.com 进行举报,并提供相关证据,工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。