欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

详解Android观察者模式的使用与优劣

程序员文章站 2022-06-23 18:26:30
一、简介观察者模式(又被称为发布-订阅(publish/subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,...

一、简介

观察者模式(又被称为发布-订阅(publish/subscribe)模式,属于行为型模式的一种,它定义了一种一对多的依赖关系,让多个观察者对象同时监听某一个主题对象。这个主题对象在状态变化时,会通知所有的观察者对象,使他们能够自动更新自己。该模式一个重要作用就是解耦,将被观察者和观察者进行解耦,使他们之间的依赖性更小

二、使用场景

关联行为场景,需要注意的是关联行为是可拆分的而不是“组合”关系
事件多级触发场景
跨系统的消息交换场景,如消息队列、事件总线的处理机制

三、简单实现

这里我们以微信公众号的订阅为例。公众号当其更新内容时就会推送给订阅了该公众号的读者。

这里需要注意的是observer和observable是jdk内置的类,表示观察者和被观察者。

四、观察者模式在android中应用

listview和recycleview 的notifydatasetchanged

当我们在使用listview或recycleview时如果数据发生变化我们会调用adapter的notifydatasetchanged()方法,如下所示

在方法内部调用了mdatasetobservable.notifychanged,这里的mdatasetobservable是一个datasetobservable实例

而datasetobservable继承自observable,我们看下datasetobservable的notifychanged方法

可以看到调用了datasetobserver的onchanged方法,datasetobserver是一个抽类这里mobservers.get(i)获得的是其子类adapterdatasetobserver.

可以看到在adapterdatasetobserver的onchanged方法中调用了requestlayout来进行重新布局。

broadcastreceiver

在android中广播也是基于观察者模式的

五、小结

观察者模式优点:

  • 解耦观察者与被观察者,应对业务变化
  • 增强系统灵活性、可扩展性

缺点:

在使用时要考虑开发效率和运行效率,程序中包括一个被观察者、多个观察者、开发调试等内容会比较复杂,且java中消息通知默认是顺序执行,如果一个观察者卡顿,那么会影响整体执行效率,在这种情况下一般考虑使用异步的方式。

以上就是详解android观察者模式的使用与优劣的详细内容,更多关于android 观察者模式的资料请关注其它相关文章!