观察者模式-java实现_JAVA_编程开发_程序员俱乐部

中国优秀的程序员网站程序员频道CXYCLUB技术地图
热搜:
更多>>
 
您所在的位置: 程序员俱乐部 > 编程开发 > JAVA > 观察者模式-java实现

观察者模式-java实现

 2015/1/20 4:12:38  liu_android_1002  程序员俱乐部  我要评论(0)
  • 摘要:观察者模式定义了对象之间的一对多的依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新利用观察者模式,主题是具有状态的对象,并且可以控制这些状态,也就是说,有一个具有状态的主题。另一方面,观察者使用了这些状态,虽然这些状态并不属于他们。有许多的观察者,依赖主题来告诉他们状态何时改变,这就产生了一个关系,一个主题对多个观察者的关系。使用java内置的观察者模式主题,被观察者对象packagecn.test.design_pattern.observer;importjava.util
  • 标签:实现 Java 模式 观察者模式

观察者模式 定义了对象之间的一对多的依赖,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新

?

利用观察者模式,主题是具有状态的对象,并且可以控制这些状态,也就是说,有一个具有状态的主题。另一方面,观察者使用了这些状态,虽然这些状态并不属于他们。有许多的观察者,依赖主题来告诉他们状态何时改变,这就产生了一个关系, 一个主题对多个观察者的关系。

?

?

使用java内置的观察者模式?

? ? 主题,被观察者对象

class="java">package cn.test.design_pattern.observer;

import java.util.Observable;

/**
 * 主题,被观察中 继承于java 内置的Observable
 * @author acer
 *
 */
public class WeatherData extends Observable{
	
	private float temperature;
	private float humidity;
	private float pressure;
	
	public float getTemperature() {
		return temperature;
	}

	public float getHumidity() {
		return humidity;
	}

	public float getPressure() {
		return pressure;
	}
	
	public  WeatherData() {

	}

	public void measuermentsChanged(){
		/**
		 * 在调用notifyObservers()之前,要先条用setChanged() 来指示状态已经改变
		 */
		this.setChanged();
		notifyObservers();
	}
	
	public void setMeasurements(float temperature,float humidity,float pressure){
		this.temperature = temperature;
		this.humidity = humidity;
		this.pressure = pressure;
		measuermentsChanged();
	}

}

?

观察者对象

package cn.test.design_pattern.observer;

import java.util.Observable;
import java.util.Observer;

/**
 * 观察者对象,实现java 内置Observer 接口
 * @author acer
 *
 */
public class CurrentConditionsDisplay implements Observer, DisplayElement {
	private float temperature;
	private float humdity;
    Observable observable;
    
	public CurrentConditionsDisplay(Observable observable) {
		/**
		 * 构造一个 主题(被观察者对象) 并指定当前对象为观察者
		 */
		this.observable = observable;
		observable.addObserver(this);
	}


	@Override
	public void display() {
		System.out.println("Current conditions: " + temperature
				+ "F degrees and " + humdity + "%humdity");
	}

	@Override
	public void update(Observable o, Object arg) {
		/**
		 * 在 update() 方法中先确定被观察者是否是当前观察者说观察的对象,然后取出被观察者中的数据
		 */
		if( o instanceof WeatherData){
			WeatherData weatherData = (WeatherData) o;
			this.humdity = weatherData.getHumidity();
			this.temperature = weatherData.getTemperature();
		    display();
		}
	}

}

?

测试代码

package cn.test.design_pattern.observer;

public class WeatherStation {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
          WeatherData weatherData = new WeatherData();
          CurrentConditionsDisplay display = new CurrentConditionsDisplay(weatherData);
          weatherData.setMeasurements(80, 120.0f, 4f);
          weatherData.setMeasurements(81, 120.0f, 4f);
          weatherData.setMeasurements(82, 120.0f, 4f);
         
 
	}

}

?

总结:

1.观察者模式定义了对象之间一对多的关系。

2.主题(被观察者) 用一个共同的接口来更新观察者。

3.观察者和被观察者之间使用松耦合方式结合,被观察者不知道观察者的细节,只知道观察者实现了观察者接口。

上一篇: Android -- com.android.providers.media,external.db 下一篇: 没有下一篇了!
发表评论
用户名: 匿名