转载请注明出处:http://blog.csdn.net/feiduclear_up/article/details/42167487


    观察者模式“定义对象间的一种一对多的依赖关系,当一个对象的状态发生改变的时候,所有依赖于它的对象都将得到通知,并自动更新”,可以理解成多个观察者向一个被观察者订阅消息,当被观察者发生改变时通知相应的观察者去作自己的事情。Android 中的观察者 实现Observer接口,被观察者继承Observable类。使用步骤如下:


   1.观察者DataWatcher 实现Observer 接口。

   2.被观察者DataChange继承Observable 类。

   3.观察者DataWatcher 向被观察者 DataChange 订阅事件(将观察者DataWatcher添加到被观察者DataChange里面去)。

   4.被观察者DataChange数据有改变,通知观察者DataWathcer相应的数据有改变,请作出相应的操作。

   5.观察者DataWather 向被观察者 DataChange取消订阅事件(将观察者DataWatcher从被观察者DataChange中移除)。



    代码实现如下:

1.观察者类

package com.example.observer;import java.util.Observable;import java.util.Observer;/** * TODO<请描述这个类是干什么的> *  * @author xjp * @data: 2014年12月26日 上午9:29:56 * @version: V1.0 */public abstract class DataWatcher implements Observer {@Overridepublic void update(Observable observable, Object data) {}}

2.被观察者类

package com.example.observer;import java.util.Observable;/** * TODO<请描述这个类是干什么的> *  * @author xjp * @data: 2014年12月26日 上午9:30:21 * @version: V1.0 */public class DataChange extends Observable {private static DataChange instance = null;public static DataChange getInstance() {if (null == instance) {instance = new DataChange();}return instance;}public void notifyDataChange(Data data) {//被观察者怎么通知观察者数据有改变了呢??这里的两个方法是关键。setChanged();notifyObservers(data);}}


3.操作类

package com.example.observer;import java.util.Observable;import android.os.Bundle;import android.app.Activity;import android.util.Log;import android.view.Menu;public class MainActivity extends Activity {private DataWatcher watcher = new DataWatcher() {@Overridepublic void update(Observable observable, Object data) {super.update(observable, data);//观察者接受到被观察者的通知,来更新自己的数据操作。Data mData = (Data)data;Log.i("Test", "mData---->>"+mData.getDataChange());}};@Overrideprotected void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);//模拟被观察者数据改变,更新数据。Data mData = new Data();mData.setDataChange(0);DataChange.getInstance().notifyDataChange(mData);}@Overrideprotected void onResume() {super.onResume();//观察者往被观察者中添加订阅事件。    DataChange.getInstance().addObserver(watcher);}@Overrideprotected void onPause() {super.onPause();//观察者从被观察者队列中移除DataChange.getInstance().deleteObserver(watcher);}}

4.数据类:

package com.example.observer;/** * TODO<请描述这个类是干什么的> *  * @author xjp * @data: 2014年12月26日 上午9:33:33 * @version: V1.0 */public class Data {private int dataChange;public Data() {}public int getDataChange() {return dataChange;}public void setDataChange(int dataChange) {this.dataChange = dataChange;}}

注意:我主要是实现android 中观察者模式代码的一个框架,具体怎么写代码还得看实际的业务。其实编程最主要的思想就是框架的实现了。


更多相关文章

  1. Android(安卓)Notification 详解
  2. 开发者必看|Android(安卓)8.0 新特性及开发指南
  3. Android中BaseAdapter原理
  4. Android(安卓)JNI Java参数类型与本地参数类型对照
  5. Android(安卓)Studio 配置使用GreenDao3.0
  6. 【建议收藏】2020年中高级Android大厂面试秘籍,为你保驾护航金三
  7. android 通过数组,流播放声音的方法
  8. Fiddler跟踪监控android数据包
  9. 疯狂Android第二章:Adapter以及部分控件使用

随机推荐

  1. Android单元测试那些事儿(一)
  2. 对Android中AsyncTask的学习
  3. Android网络编程之WebKit应用
  4. android repo中manifest.xml的详解
  5. Android中切换屏幕方向时Activity生命周
  6. Android SDK 之 InputMethodService 详解
  7. Android(安卓)TV/盒子开发遥控器焦点处理
  8. Android 内功心法(番外)——写在设计模式
  9. android的2种Animation模式配置
  10. Android(安卓)HAL层模块的加载过程