程序员Android技术知识Android知识

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

2017-03-29  本文已影响0人  Alexey

使用率很高,常常用于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进行重新布局。

上一篇 下一篇

猜你喜欢

热点阅读