项目:气象监测系统
需求分析::此系统中三个部分是气象站(获取实际气象数据的物理装置)、WeatherData对象(追踪气象站的数据,并更新布告板)和布告板(显示目前天气状况给用户看)。
WeatherData对象知道如何跟物理气象站联系,以取得更新的数据。WeatherData对象会随机更新三个布告板的显示:目前状况(温度、湿度、气压)、气象统计和天气预报。
当WeatherData对象发生变化时,即刻更新数据并推送给三个布告板。因此WeatherData需要获得布告板的引用,在数据更新时发送给布告板。用代码说话:
首先设计2个接口:
1. Subject,包含3个方法:Register, Remove, NotifyObservers
2.Observer, 包含1个方法:Update
设计WeatherData,实现Subject。除此之外还需要获得布告板引用,添加字段observerList集合,以及温度、湿度、气压字段。还有设置天气属性的的方法SetMeasurements,
MeasurementsChanged方法,当设置天气属性时即调用改方法,然后通知注册的用户。
1 namespace ObserverPattern 2 { 3 public interface Subject 4 { 5 void RegisterObserver(Observer o); 6 void RemoveObserver(Observer o); 7 void NotifyObservers(); 8 } 9 }
1 namespace ObserverPattern 2 { 3 public interface Observer 4 { 5 void Update(float temp, float humidity, float pressure); 6 } 7 }
1 using System.Collections.Generic; 2 3 namespace ObserverPattern 4 { 5 public class WeatherData : Subject 6 { 7 private List<Observer> observerList = new List<Observer>(); 8 private float temperature; 9 private float humidity; 10 private float pressure; 11 12 public void NotifyObservers() 13 { 14 foreach (Observer o in observerList) 15 { 16 o.Update(temperature, humidity, pressure); 17 } 18 } 19 20 public void RegisterObserver(Observer o) 21 { 22 observerList.Add(o); 23 } 24 <

