《(1.7)--第5.2章-观察者模式软件设计与体系结构.ppt》由会员分享,可在线阅读,更多相关《(1.7)--第5.2章-观察者模式软件设计与体系结构.ppt(30页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、第5.2章 观察者模式1气象观测站软件在气象站中有各种物理感应装置采集各种天气状况数据,我们的目标是使用这些气象数据搭建各种气象布告板应用。第5.2章 观察者模式2WeatherData类1.中间件类需要持有三个测量值:温度、湿度、气压,并且具有getter方法,可以取得三个测量值。2.设计三个使用天气数据的上层应用:当前值显示、气象统计、温度预测。3.一旦中间件类有新的测量值,这些应用必须马上更新。此系统必须可扩展,让其他开发人员建立定制的布告板,用户可以随心所欲地添加或删除任何布告板。第5.2章 观察者模式3WeatherData类第5.2章 观察者模式4实现方式1第5.2章 观察者模式5
2、问题第5.2章 观察者模式6实现方式1的问题第5.2章 观察者模式7观察者模式报纸订阅报社的业务出版报纸。向某家报社订阅报纸,只要他们有新报纸出版,就会给你送来。只要你是他们的用户,你就会一直收到新报纸。当你不想再看报纸时,取消订阅,他们就不会再送新报纸来。只要报社还运营,就会一直有人向他们订阅报纸或取消订阅报纸。第5.2章 观察者模式8观察者模式=出版者+订阅者出版者:主题(Subject)订阅者:观察者(Observer)(Observer)第5.2章 观察者模式9第5.2章 观察者模式10第5.2章 观察者模式11观察者模式实现第5.2章 观察者模式12实现气象观测站软件第5.2章 观察
3、者模式13第5.2章 观察者模式14第7章 设计模式157.2 观察者模式第5.2章 观察者模式16测试气象观测站软件第5.2章 观察者模式17测试气象观测站软件第7章 设计模式187.2 观察者模式第5.2章 观察者模式19观察者模式定义定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新发布-订阅(Publish/Subscribe)模式第5.2章 观察者模式20观察者模式提供了一种对象设计,让主题和观察者之间松耦合主题只知道观察者实现了某个接口,不需要知道观察者具体是谁、做了什么任何时候均可以增加观察者,因为主题唯一依赖的东西是一个实现观察者接
4、口的对象列表有新类型的观察者出现时,主题的代码不需要修改;主题只做一件事:发送通知给所有实现了观察者接口的对象改变主题或观察者其中一方,并不会影响另一方设计原则为了交互对象之间的松耦合设计而努力第5.2章 观察者模式21扩展:推模式 or 拉模式推模式主题对象向观察者推送主题的详细信息,不管观察者是否需要,推送的信息通常是主题对象的全部或部分数据。拉模式观察者主动到主题对象中获取数据。把主题对象自身通过update()方法传递给观察者,观察者需要获取数据的时候,通过这个引用来获取。第5.2章 观察者模式拉模式22第5.2章 观察者模式拉模式23第5.2章 观察者模式拉模式24第5.2章 观察者
5、模式拉模式25第5.2章 观察者模式拉模式26第5.2章 观察者模式推模式 v.s.拉模式推模型是假定主题对象知道观察者需要的数据;而拉模型是主题对象不知道观察者具体需要什么数据,没有办法的情况下,干脆把自身传递给观察者,让观察者自己去按需要取值。推模型可能会使得观察者对象难以复用,因为观察者的update()方法是按需要定义的参数,可能无法兼顾没有考虑到的使用情况。这就意味着出现新情况的时候,就可能提供新的update()方法,或者是干脆重新实现观察者;而拉模型就不会造成这样的情况,因为拉模型下,update()方法的参数是主题对象本身,这基本上是主题对象能传递的最大数据集合了,基本上可以适
6、应各种情况的需要。27第5.2章 观察者模式28扩展:JAVA提供的对观察者模式的支持java.utilObservable类Observer接口第5.2章 观察者模式29问题在目前的气象观测站软件中加入一种新的公告板酷热指数公告板酷热指数是一个结合温度和湿度的指数,用来显示人的温度感受。可以利用温度T和相对湿度RH使用如下公式计算酷热指数:如何实现酷热指数公告板(推/拉)?第5.2章 观察者模式30总结观察者模式定义了对象之间一对多的关系主题(被观察者)用一个共同的接口来更新观察者观察者与主题之间用松耦合方式结合,主题不直到观察者的细节,只知道观察者实现了观察者接口使用观察者模式时,你可以从主题处推或拉数据有多个观察者时,不可以依据特定的通知次序