Java设计模式 -- 观察者模式(pull方式)

还是和push一样,有个主题WeatherData.java的类

import java.util.Observable; public class WeatherData extends Observable { private float temperature; private float humidity; private float pressure; public WeatherData(){} public void measurementsChanged() { setChanged(); 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; } }

请注意:这里的WeahterData.java继承的是java.util.Observable

在Observable方法中

setChanged();方法把changed设置为true;

notifyObservers();方法只有在changed为true的时候才去通知观察者。

接下来是观察者对象:CurrentConditionsDisplay.java对象。

import java.util.Observable; import java.util.Observer; import org.inter.DisplayElement; public class CurrentConditionsDisplay implements Observer, DisplayElement{ Observable observable; private float temperature; private float humidity; public CurrentConditionsDisplay(Observable observable) { this.observable = observable; observable.addObserver(this); } public void update(Observable o, Object arg) { // TODO Auto-generated method stub if(o instanceof WeatherData) { WeatherData weatherData = (WeatherData) o; this.temperature = weatherData.getTemperature(); this.humidity = weatherData.getHumidity(); display(); } } public void display() { // TODO Auto-generated method stub System.out.println(temperature + " : " + humidity); } }

同push同样的方法来验证:

public class PushWeatherStation { public static void main(String[] args) { WeatherData wd = new WeatherData(); CurrentConditionsDisplay display = new CurrentConditionsDisplay(wd); wd.setMeasurements(80, 65, 30.4f); wd.setMeasurements(10, 25, 30.4f); } }

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值