Android中的观察者DataSetObservable和DataSetObserver

原创 2013年12月05日 15:43:07

   Observable是观察者模式的典型应用。在Android下,Observable是一个泛型的抽象类,表示一个观察者对象,提供了观察者注册、反注册及清空三个方法,其源码如下:

[java] view plaincopy
  1. public abstract class Observable<T> {  
  2.   
  3.     protected final ArrayList<T> mObservers = new ArrayList<T>();  
  4.   
  5.     public void registerObserver(T observer) {  
  6.         if (observer == null) {  
  7.             throw new IllegalArgumentException("The observer is null.");  
  8.         }  
  9.         synchronized(mObservers) {  
  10.             if (mObservers.contains(observer)) {  
  11.                 throw new IllegalStateException("Observer " + observer + " is already registered.");  
  12.             }  
  13.             mObservers.add(observer);  
  14.         }  
  15.     }  
  16.   
  17.     public void unregisterObserver(T observer) {  
  18.         if (observer == null) {  
  19.             throw new IllegalArgumentException("The observer is null.");  
  20.         }  
  21.         synchronized(mObservers) {  
  22.             int index = mObservers.indexOf(observer);  
  23.             if (index == -1) {  
  24.                 throw new IllegalStateException("Observer " + observer + " was not registered.");  
  25.             }  
  26.             mObservers.remove(index);  
  27.         }  
  28.     }  
  29.   
  30.     public void unregisterAll() {  
  31.         synchronized(mObservers) {  
  32.             mObservers.clear();  
  33.         }          
  34.     }  
  35. }  
     Observable的直接继承者有两个:DataSetObservable和ContentObservable。ContentObservable实现比较复杂,不过功能与DataSetObservable类似,这里只讲解DataSetObservable。

DataSetObservable在很多的Adapter中都用到,像BaseAdapter。DataSetObservable使用DataSetObserver实例化了Observable。DataSetObserver表示了一个数据集对象的观察者,主要提供了两个方法:

[java] view plaincopy
  1. public abstract class DataSetObserver {  
  2.   
  3.     public void onChanged() {  
  4.         // Do nothing  
  5.     }  
  6.   
  7.     public void onInvalidated() {  
  8.         // Do nothing  
  9.     }  
  10. }  

DataSetObservable实现如下:

[java] view plaincopy
  1. public class DataSetObservable extends Observable<DataSetObserver> {  
  2.   
  3.     public void notifyChanged() {  
  4.         synchronized(mObservers) {  
  5.             for (DataSetObserver observer : mObservers) {  
  6.                 observer.onChanged();  
  7.             }  
  8.         }  
  9.     }  
  10.   
  11.     public void notifyInvalidated() {  
  12.         synchronized (mObservers) {  
  13.             for (DataSetObserver observer : mObservers) {  
  14.                 observer.onInvalidated();  
  15.             }  
  16.         }  
  17.     }  
  18. }  

当数据集有变化时,会调用DataSetObserver的onChanged()方法;当数据集失效时,会调用DataSetObserver的onINvalidated()方法。

ListView观察者模式的应用

首先说说Adapter具体的类的继承关系,如下图     Adapte为接口它的实现类的对象作为AdapterView和View的桥梁,Adapter是装载了View(比如ListView和girdV...
  • chunqiuwei
  • chunqiuwei
  • 2014年10月09日 18:03
  • 13476

registerDataSetObserver:浅析Andorid ListView和Adapter

转载自:http://www.jcodecraeer.com/a/anzhuokaifa/androidkaifa/2013/0323/1059.html最近由于遇到将内容分部绑定到ListView里...
  • crz082
  • crz082
  • 2015年08月03日 17:29
  • 663

DatasetObserver与ContentObserver

通过ContentObserver来监测Databases的改变,并且做出相应的处理。 但对Databases的改变,除了可以通过ContentObserver来监测外,还可以通过DatasetOb...
  • zhaoweixing1989
  • zhaoweixing1989
  • 2012年01月06日 11:45
  • 4256

Android 设计模式 之 观察者模式

[java] view plaincopyprint? /*  * 观察者模式  *      定义对象间的一种一个(Subject)对多(Observer)的依赖关系,当一个对象的状态...
  • liguangzhenghi
  • liguangzhenghi
  • 2012年10月16日 11:35
  • 4982

Android中的设计模式——DataSetObservable 观察者模式

ListView类,当我们设置Adapter的时候,注册了观察者:public void setAdapter(ListAdapter adapter) { 。。。 //Adapter...
  • fofu33
  • fofu33
  • 2015年08月04日 15:52
  • 774

Android 中的观察者模式Observer

Android 中的观察者模式 实现的简单框架。
  • feidu804677682
  • feidu804677682
  • 2014年12月26日 09:51
  • 10145

Android中内容观察者的使用---- ContentObserver类详解

转载请注明出处:http://blog.csdn.net/qinjuning                             前言: 工作中,需要开启一个线程大量的查询某个数据库值发送...
  • qinjuning
  • qinjuning
  • 2011年12月06日 21:17
  • 91641

Android设计模式学习之观察者模式

观察者模式在实际项目中使用的也是非常频繁的,它最常用的地方是GUI系统、订阅——发布系统等。因为这个模式的一个重要作用就是解耦,使得它们之间的依赖性更小,甚至做到毫无依赖。以GUI系统来说,应用的UI...
  • u012124438
  • u012124438
  • 2017年02月17日 00:25
  • 9793

Android 观察者与被观察者

最近正好闲来无事,正好做完项目,由于里面用到了RxJava,有些许体会,但今天我在这儿,并不会讲RXjava,任何事情都有个循序渐进的过程,后续我会陆续讲RXJAVA并用很通俗的语言,毕竟我每次看到一...
  • JimTrency
  • JimTrency
  • 2016年06月25日 16:34
  • 1072

[Android进阶]Android中使用的观察者模式

Android中使用观察者模式的代码有很多,比如最近很火的EventBus、RxAndroid等,都使用了观察者模式,原因是观察者模式观察者和被观察者之间是抽象耦合,应对业务变化,可以增强系统灵活性,...
  • CodeEmperor
  • CodeEmperor
  • 2016年05月15日 18:43
  • 1322
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:Android中的观察者DataSetObservable和DataSetObserver
举报原因:
原因补充:

(最多只允许输入30个字)