Android之观察者模式源码分析(DataSetObserver)

在阅读本片文章之前希望你先看下上篇的博客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) 
  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值