head first 设计模式之----Observer pattern (二)

2014-11-24 10:21:34 · 作者: · 浏览: 2
lse if (currentPressure == lastPressure) { System.out.println("More of the same"); } else if (currentPressure < lastPressure) { System.out.println("Watch out for cooler, rainy weather"); } } } package com.clark.observerpattern.subject; import java.util.ArrayList; import com.clark.observerpattern.observer.Observer; /** * 模拟气象站的具体主题Subject * @author Administrator * */ public class WeatherData implements Subject { private ArrayList observers; private float temp; private float humidity; private float pressure; public WeatherData() { observers=new ArrayList(); } @Override public void registerObserver(Observer obj) { observers.add(obj); } @Override public void removeObserver(Observer obj) { int i=observers.indexOf(obj); if(i>=0){ observers.remove(i); } } @Override public void notifyAllObserver() { for (int i = 0; i < observers.size(); i++) { Observer o=(Observer) observers.get(i); o.update(temp, humidity, pressure); } } //当从气象站获取更新数据的时候,我们通知观察着 public void measurementsChange(){ notifyAllObserver(); } //读取气象站数据 public void setMeasurements(float temp,float humidity,float pressure){ this.temp=temp; this.humidity=humidity; this.pressure=pressure; measurementsChange(); } } package com.clark.observerpattern; import com.clark.observerpattern.observer.ForecastDisplay; import com.clark.observerpattern.observer.StatisticsDisplay; import com.clark.observerpattern.subject.WeatherData; /** * 气象站 * @author Administrator * */ public class WeatherStation { public static void main(String[] args) { WeatherData weatherData=new WeatherData(); //先往Subject中添加所有注册的主题 CurrentConditionsDisplay currentDisplay=new CurrentConditionsDisplay(weatherData); StatisticsDisplay statistic=new StatisticsDisplay(weatherData); ForecastDisplay foreCast=new ForecastDisplay(weatherData); //再调用方法从主题中获取数据,从而在布告板中及时显示 weatherData.setMeasurements(50, 80, 66); weatherData.setMeasurements(48, 80, 67); weatherData.setMeasurements(52, 80, 65); } }