OBSERVER 模式.ppt

上传人:文库蛋蛋多 文档编号:2698630 上传时间:2023-02-23 格式:PPT 页数:27 大小:9.20MB
返回 下载 相关 举报
OBSERVER 模式.ppt_第1页
第1页 / 共27页
OBSERVER 模式.ppt_第2页
第2页 / 共27页
OBSERVER 模式.ppt_第3页
第3页 / 共27页
OBSERVER 模式.ppt_第4页
第4页 / 共27页
OBSERVER 模式.ppt_第5页
第5页 / 共27页
点击查看更多>>
资源描述

《OBSERVER 模式.ppt》由会员分享,可在线阅读,更多相关《OBSERVER 模式.ppt(27页珍藏版)》请在三一办公上搜索。

1、OBSERVER 模式,喂!小丽啊!通知项目组,下午开个项目会议,气象站例子,需求:终端用使用显示设备,显示当前的环境(温度、湿度和气压)、天气统计和简单的预报的三个测量值从程序上考虑,执行measurementsChanged()方法,目的更新当前环境、天气统计和预报1、天气数据类里应该有得到三个测量值的getter方法。2、measurementsChanged()可以被有效的测量数据在任何时候调用。3、三个测量值因新测量数据改变而改变4、系统可以被扩充,如下图,Class:WeatherData 通常的实现如下,分析 WeatherData 的缺点currentConditionsDis

2、play、tatisticsDisplay、forecastDisplay,具体执行方法,我们没法增加和删除其它的显示元素,除非改变程序。(temp,humidity,pressure),我们可以用通用的接口去告诉显示的元素,他们都有一个update方法传递temp,humidity,pressure值,什么是观查者模式?报社+订阅者=Observer Pattern报纸出版社进入商业化,并且开始出版报纸你订阅了报纸,每次报上都有新的新闻发表给你,只要你保持是一个订阅者,你就一直得到新的新闻。当你不订阅时,他们就停止向你发表新的新闻然而报社保持着与其它人订与不订的关系,如下图,Dog、Cat、

3、Mouse都是订阅者(观查者),Subject是出版社(被观查者)。当Subject改变时所有的订阅者都被通知,并且新的值传送你观查者。Duck不是观查者,因此当Subject数据改变时,它不能得到通知。,Observer的生命周期(1)Duck请求成为订阅者,Duck成为正式的订阅者,Duck接收数据,Mouse请求取消订阅关系,Mouse消取了订阅者身份,当Subject有变更时,Mouse得不取新的值,Observer Pattern 定义一个类与一个类集合类一对多的关系,当一个类状态改变时,所有的依赖关系都被自动地改变和通报报社是一个类(被观查者),订阅者是一个集合类(观查者),当报社

4、发布新的报纸时,会分发给每一个订阅者(即通报)。通俗理解:被观查者有什么变化,观查者立即做出反应,被观查者与观查者是一对多的关系如下图subject与observers定义了一对多的关系,observers依赖与subject,那么当subject状态改变时,observer就会得到通报,Observer模式的特点:有力的松散地耦合:Subject只要知道关于实现一种特别的Observer接口,不需要知道具体的observer类做什么,或是别的。我们能随时增加一个新的observers我们不需要因为增加新的类型observers修改subject我们能重新使用subject或observers

5、彼此间的依赖改变subject或observer将不影响彼此,程序实现一、观查者实现(java.util.Observer)接口,并且调用Observable对象的addObserver()方法,将自已设成观查者身份,也可用删除方法,删除自已。二、由Observable发送通知首先继承一个java.util.Observable的超类,然后处理下面两步:(1)先必须调用setChanged()方法,表示在你的对象中状态改变了。(2)调用两个notifyObservers()方法中的一个,发送通知三、观查者接收通知观查者需要实现Observer接口的update方法,接收通知的改变。,气象站类图,设计原则:作用类间尽力使用松耦合设计,现在你有三类鸭子,野鸭(会飞),饲养鸭(不会飞但会跑),橡皮鸭(不会飞也不会跑)如果现在你对这三类进行鸭子大叫一声,鸭子们会有什么反映?,

展开阅读全文
相关资源
猜你喜欢
相关搜索

当前位置:首页 > 建筑/施工/环境 > 项目建议


备案号:宁ICP备20000045号-2

经营许可证:宁B2-20210002

宁公网安备 64010402000987号