Observer 观察者模式

 项目:气象监测系统

需求分析::此系统中三个部分是气象站(获取实际气象数据的物理装置)、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 <
                    
50000+
5万行代码练就真实本领
17年
创办于2008年老牌培训机构
1000+
合作企业
98%
就业率

联系我们

电话咨询

0532-85025005

扫码添加微信