Android 中的观察者模式Observer

    转载请注明出处: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) {
	}

}

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() {

		@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.数据类:

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 中观察者模式代码的一个框架,具体怎么写代码还得看实际的业务。其实编程最主要的思想就是框架的实现了。


  • 10
    点赞
  • 13
    收藏
    觉得还不错? 一键收藏
  • 10
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 10
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值