一、问题描述
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()

本文介绍了如何使用观察者模式来设计一个气象站系统,包括抽象主题Subject、抽象观察者Observer、具体主题WeatherData以及不同类型的布告板(如CurrentConditionsDisplay、StatisticsDisplay和ForecastDisplay)。新增的HeatIndexDisplay布告板展示了如何扩展该系统。文章强调了通过update方法传递数据,并讨论了主题引用在观察者模式中的作用和灵活性。
最低0.47元/天 解锁文章
321

被折叠的 条评论
为什么被折叠?



