您的位置:首页 > 其它

设计模式学习笔记观察者模式

2015-08-08 13:25 363 查看
1、概念

它定义对象之间的许多依赖,象(主题对象)的状态改变时,它的全部依赖者(观察者对象)都会收到通知并自己主动更新。

2、优势

观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需改动主题对象的代码。仅仅须要新的观察者对象实现接口。在程序执行的过程中,能够随时注冊和删除观察者而不影响主体对象。

观察者模式使主题(Subject)对象和观察者(Observer)对象都能够被轻易地复用。

3、Java中观察者模式

Java API有内置的观察者模式,java.util包内包括最主要的Observer接口与Observable类

实现(源自head first)

主题对象

//observeable为Java自带的主题对象。自带
addObserver(Observer o),
deleteObserver(Observer o),hasChanged()
,[code]notifyObservers(Object arg)
等方法[/code]

public class WeatherData extends Observable {

private float temperature;

private float humidity;

private float pressure;

public WeatherData() { }

public void measurementsChanged() {

setChanged();

//notifyObservsers方法。假设
hasChanged
方法指示对象已改变,则通知其全部观察者(调用观察者的update方法)

notifyObservers();

}

public void setMeasurements(float temperature, float humidity, float pressure) {

this.temperature = temperature;

this.humidity = humidity;

this.pressure = pressure;

measurementsChanged();

}

public float getTemperature() {

return temperature;

}

public float getHumidity() {

return humidity;

}

public float getPressure() {

return pressure;

}

}

//观察者对象

import java.util.Observable;

import java.util.Observer;

public class CurrentConditionsDisplay implements Observer {

Observable observable;

private float temperature;

private float humidity;

//初始化,建立一个观察者对象时,指明该对象的主题对象,并向该主题对象观察者队列中加入该对象

public CurrentConditionsDisplay(Observable observable) {

this.observable = observable;

observable.addObserver(this);

}

public void update(Observable obs, Object arg) {

if (obs instanceof WeatherData) {

WeatherData weatherData = (WeatherData)obs;

this.temperature = weatherData.getTemperature();

this.humidity = weatherData.getHumidity();

display();

}

}

public void display() {

System.out.println("Current conditions: " + temperature

+ "F degrees and " + humidity + "% humidity");

}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: