美文网首页程序员Android技术知识Android知识
每日Android源码设计模式之-11、观察者模式

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

作者: Alexey | 来源:发表于2017-03-29 19:43 被阅读0次

使用率很高,常常用于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源码设计模式之-11、观察者模式

    本文链接:https://www.haomeiwen.com/subject/llrlottx.html