Android 中的观察者模式Observer
2016-11-09 14:49
204 查看
转载自 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.观察者类
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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) {
}
}
2.被观察者类
[java] view
plain copy
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.操作类
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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);
}
}
4.数据类:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
![](https://code.csdn.net/assets/ico_fork.svg)
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 中的观察者
实现Observer接口,被观察者继承Observable类。使用步骤如下:
1.观察者DataWatcher 实现Observer 接口。
2.被观察者DataChange继承Observable 类。
3.观察者DataWatcher 向被观察者 DataChange 订阅事件(将观察者DataWatcher添加到被观察者DataChange里面去)。
4.被观察者DataChange数据有改变,通知观察者DataWathcer相应的数据有改变,请作出相应的操作。
5.观察者DataWather 向被观察者 DataChange取消订阅事件(将观察者DataWatcher从被观察者DataChange中移除)。
代码实现如下:
1.观察者类
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
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) {
}
}
2.被观察者类
[java] view
plain copy
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.操作类
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
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);
}
}
4.数据类:
[java] view
plain copy
![](https://code.csdn.net/assets/CODE_ico.png)
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 Observable and Observer(观察者模式)
- 浅学设计模式之观察者<Observer>模式及在android中的应用 .
- Android之观察者模式源码分析(DataSetObserver)
- 解析 ViewTreeObserver 源码,体会观察者模式、Android消息传递(下)
- Android设计模式之观察者模式 Observer
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- [Android&Java]浅谈设计模式-代码篇:观察者模式Observer
- Android设计模式之观察者模式(Observer Pattern)
- 2015-11-13 (二)初探Observer和Observable的用法,了解Android 观察者模式的第一步
- Observer - 即观察者模式在android的正确食用方式
- Android与设计模式——观察者(Observer)模式
- 设计模式In Android——观察者(Observer)模式_1
- android基础笔记——Observer观察者模式
- Android设计模式之观察者模式 Observer
- 浅学设计模式之观察者<Observer>模式及在android中的应用
- android Observable and Observer(观察者模式)
- android设计模式--之观察者模式(Observer)
- Android Observer观察者模式
- Android设计模式之观察者模式 Observer
- Android设计模式之观察者模式 Observer