每日Android源码设计模式之-11、观察者模式

使用率很高,常常用于GUI系统、订阅-发布系统,他讲观察者与被观察者进行解耦。


定义:是一种一对多的关系,当一个对象状态改变,依赖与他的其他对象就会得到通知,并且更行。


使用场景:

1.关联行为场景,注意关联行为是可拆分的,而不是‘组合’关系。

2.时间多级出发机制

3.跨系统的消息交换场景,如消息队列,事件总线的处理机制。


结构:

Subject类:抽象的被观察者,把所有的观察者存储在一个集合里。

ConcreteSubject:具体被观察者类,内部状态改变时,给所有注册过的观察者发送消息。

Observer:抽象观察者,定义了一个借口,使得在得到主题的更改通知时更新自己。

ConcreteObserver:实现了接口方法。


Android 源码:

listView的notifyDataSetchanged方法,这个方法定义在BaseAdapter中。

BaseAdapter里面有一个成员变量mDataSetOvservable,当我们调用notifyDataSetChanged的时候,其实调用了mDataSetOvservable.notifyChanged()。

而这个方法里面进行了一个循环,遍历mObservers,调用onChanged()方法。

这些观察者是ListView通过setAdapter方法设置Adapter产生的,在设置Adapter的时候会构建一个AdapterDataSetObserver,然后注册到adapter中。

onchange方法中调用requestLayout()方法对listview进行重新布局。

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

推荐阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 173,333评论 25 708
  • 1 定义 定义对象之间的一种一对多依赖关系,使得每当一个对象状态发生改变时,其相关依赖对象皆得到通知并被自动更新。...
    菜小轩526阅读 551评论 3 3
  • 前言 Android的设计模式系列文章介绍,欢迎关注,持续更新中: Android的设计模式-设计模式的六大原则一...
    四月葡萄阅读 30,612评论 7 64
  • 文/安小河 生如长梦,我们都在流连徘徊于一个个的停留或是离散之间。我们仨:钱钟书、杨绛、钱媛。杨绛先生用一个老人的...
    安小河阅读 901评论 0 2
  • 晚上带小朋友去剪头发,进去半天没人理,我实在忍不住,主动询问: 我:请问给小朋友剪头发多少钱一位啊? 店员:118...
    毛毛虫8655阅读 280评论 0 0