一、问题描述
Weather-O-Rama气象站计划建立下一代的Internet气象观察站,该气象站必须建立在WeatherData对象的基础上,WeatherData对象提供天气数据,有三种布告板,分别显示目前的状况、气象统计及简单的预报。并且以后可以方便地增加布告板进行扩展。
使用观察者模式进行设计,WeatherData对象即观察者模式中的主题对象,三个布告板即观察者。
二、类图
三、实现代码
1.抽象主题Subject
public interface Subject {
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers();
}
2.抽象观察者Obsever
public interface Observer {
public void update(float temp, float humidity, float pressure);
}
可以看出,使用的是推数据的方式。
3.具体主题WeatherData
public class WeatherData implements Subject {
private ArrayList observers;
//temperature、humidity、pressure就是WeatherData的“状态”
private float temperature;
private float humidity;
private float pressure;
public WeatherData() {
observers = new ArrayList();
}
public void registerObserver(Observer o) {
observers.add(o);
}
public void removeObserver(Observer o) {
int i = observers.indexOf(o);
if (i >= 0) {
observers.remove(i);
}
}
public void notifyObservers() {
for (int i = 0; i < observers.size(); i++) {
Observer observer &#