在阅读本片文章之前希望你先看下上篇的博客Java设计模式之观察者模式
##1、分析理解
Android中我们常用的观察者是:DataSetObserver、ContentObserver
ContentObserver : 可能我们在学ContentProvider时接触过ContentObserver;当我们添加、删除、更新数据时,通过它来为我们共享的数据添加监听器。
DataSetObserver:它我们乍一看很陌生,其实它离我们很近,我们几乎经常用到它;只不过我们看不到而已,你记得AbsListView吧!每当我们AbsListView.setAdapter()时,就会自动为我们在Adapter上注册个DataSetObserver监听器。所以我们通过BaseAdapter.notifyDataSetChanged()时,都会更新我们的AbsListView。
由于ContentObserver比较复杂,但与DataSetObserver的原理是相同的;本篇博客我们只分析DataSetObserver。
通过上篇的博客我们已经知道,Java的观察者模式无非就是涉及到四个角色:
1、抽象主题(Subject)
2、具体主题(ConcreteSubject)
3、抽象观察者(Observer)
4、具体观察者(ContreteObserver)
当我们的具体主题(ConcreteSubject)中更新数据时,需要所有的具体观察者(ConcreteSubject)实时更新数据。在上篇博客中Java设计模式之观察者模式有一个控制类,它就是ObserverDemo(拥有main()方法),它的任务就是负责将具体主题与具体观察者建立联系(其实就是MVC中的Controller)。但它的还不是十分的明显,在Android中这个Controller的作用将会体现的淋漓尽致。下面让我们一起去揭开它的面纱!!!但它到底是谁呢?
##2、Android中观察者模式的四个角色
下面让从源码中分析下Android中观察者模式的四个角色:
###1、抽象主题(Subject)
/**
* Provides methods for (un)registering arbitrary observers in an ArrayList.
*/
public abstract class Observable<T> {
/**
* The list of observers. An observer can be in the list at most
* once and will never be null.
*/
protected final ArrayList<T> mObservers = new ArrayList<T>();
/**
* Adds an observer to the list. The observer cannot be null and it must not already
* be registered.
* @param observer the observer to register
* @throws IllegalArgumentException the observer is null
* @throws IllegalStateException the observer is already registered
*/
public void registerObserver(T observer) {
if (observer == null)