欢迎来到天天文库
浏览记录
ID:56235743
大小:506.50 KB
页数:20页
时间:2020-03-23
《深入浅出观察者模式费下载.doc》由会员上传分享,免费在线阅读,更多相关内容在工程资料-天天文库。
1、深入浅出观察者模式一、引子想知道咱们公司最新MM情报吗?加入公司的MM情报邮件组就行了,Tom负责搜集情报,他发现的新情报不用一个一个通知我们,直接发布给邮件组,我们作为订阅者(观察者)就可以及时收到情报啦。二、定义和结构观察者模式定义了一种一对多的依赖关系,让多个观察者对彖同时监听某一个主题对象。这个主题对象在状态上发生变化时,会通他所有观察者对象,使他们能够自动更新自己。三、用观察者模式实现基于Internet的气象监控站恭喜你!你的开发团队赢得了一份为Weather-O-Rama公司开发下一代气象监控站的合同。合同内容如下:恭喜贵公司被选定为我们开发
2、基于Internet的新一代气象监控站!该气象监控站将基于本公司已申请专利的WeatherData対彖来监测半前的气象条件(温度、湿度和气压值)。我们希望你们开发一个应用程序,它初步提供三种显示要素:半前气象条件、天气数据和一个简单的预报,它们会在WeatherData对象获得最新的测量数据后进行实时地更新。此外,这应该是一种可扩展的气象站。Weather-O-Rama公司希望发布一种API使得其他开发者能够编写他们IH己的气象显示图并插入进来。我们希望你们提供这种APLWeather-O-Rama公司认为我们拥有—•种伟大的商业模型:一旦顾客上钩了,我们
3、会对他们使用的每张显示图进行收费。现在对你们而言最好的消息是:我们打算用优先认股权来付帐。我们渴望见到你的设计和alpha版的应用程序。真诚的JohnnyHurricane,CEO附:我们准备将WeatherData的源代码连夜传给你们。看到这份厚颜无耻的合同,一心想发横财的你是否激动得热泪盈眶了呢?这真是个好机会,马丄开始工作吧。气象监控程序的概略图我们的这个系统屮有三位玩家,它们是气象站(获得实际天气数据的物理设施)、WeatherData对象(用于监测来气象站的数据并更新显示),以及向用户显示当前气象WeatherData对彖知道该怎地和具体的气象站
4、打交道来取得更新后的数据。然后WeatherData对彖会更新三种显示单元的显示:当前气象条件(温度、湿度,和气床),气象统计数据,以及一个简单的天气预报。如果我们接受这份合同的话,我们的工作就是产生一个应用程序,它使用WeatherData对彖来更新为前气象条件,气象统计数据,以及天气预报这三种视图。解包WeatherData类正如他们承诺的那样,第二天早丄WeatherData的源文件寄到了。打开一看它的代码,一切都很直接嘛:WeatherDatagetTemperature()getHumidity()getPressure()measurement
5、Changed()//othermethodsThesethreemethodsreturnthemostrecentweathermeasurementsfortemperature.humidity,andpressurerespectively.WedontcareHOWthesevariablesareset;theWeatherDataobjectknowshowtogetupdatedinformationfromtheWeatherStationAclue:whatweneedtoadd!一次初步的、被误导的对气象站的开发尝试以下是—•种可能
6、存在的初步实现——我们从Weather-O-Rama开发者那里得到启示并将自己的代码加入到measurementsChanged()方法:publicclassWeatherData{//instancevariabledeclarationspublicvoidmeasurementsChanged(){floattemp=getTemperature();floathumidity=getHumidity();floatpressure=getPressure();currentConditionsDisplay.update(temp,humidit
7、y,pressure);statisticsDisplay.update(temp,humidity,pressure);forecastDisplay.update(temp,humidity,pressure);}//otherWeatherDatamethodshere我们的实现错在哪儿了?请回忆第一章屮学过的原则和概念……由于对具体实现进行编码,我们就没有什么办法在不改动程序的情况下増加或减少显示单元。至少我们看起来在使用一个通用的接口來与显示单元进行交流……它们都使用update()方法,该方法把temp、humidity和pressure作为参
8、数。初遇观察者模式我们都知道报纸和杂志发行的订阅流程是怎样的:■一
此文档下载收益归作者所有