码迷,mamicode.com
首页 > 其他好文 > 详细

<<Head First设计模式>>之观察者模式学习

时间:2014-07-15 22:36:54      阅读:175      评论:0      收藏:0      [点我收藏+]

标签:设计模式   java   观察者模式   

1、概念

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

2、优势

观察者模式实现了主题对象与观察者对象之间的松耦合,当有新的观察者时,无需修改主题对象的代码,只需要新的观察者对象实现接口。在程序运行的过程中,可以随时注册和删除观察者而不影响主体对象。 
观察者模式使主题(Subject)对象和观察者(Observer)对象都可以被轻易地复用。

3、Java中观察者模式

Java API有内置的观察者模式,java.util包内包含最基本的Observer接口与Observable类

实现(源自head first)

主题对象

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

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");
}
}

<<Head First设计模式>>之观察者模式学习,布布扣,bubuko.com

<<Head First设计模式>>之观察者模式学习

标签:设计模式   java   观察者模式   

原文地址:http://blog.csdn.net/guo_net/article/details/37772105

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!