标签:
转载请注明出处: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 { @Override public void update(Observable observable, Object data) { } }
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() { @Override public void update(Observable observable, Object data) { super.update(observable, data); //观察者接受到被观察者的通知,来更新自己的数据操作。 Data mData = (Data)data; Log.i("Test", "mData---->>"+mData.getDataChange()); } }; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); //模拟被观察者数据改变,更新数据。 Data mData = new Data(); mData.setDataChange(0); DataChange.getInstance().notifyDataChange(mData); } @Override protected void onResume() { super.onResume(); //观察者往被观察者中添加订阅事件。 DataChange.getInstance().addObserver(watcher); } @Override protected void onPause() { super.onPause(); //观察者从被观察者队列中移除 DataChange.getInstance().deleteObserver(watcher); } }
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; } }
标签:
原文地址:http://blog.csdn.net/feiduclear_up/article/details/42167487