您好,欢迎访问三七文档
当前位置:首页 > 商业/管理/HR > 资本运营 > 面向对象系统分析与设计_观察者模式
2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright1OOSystemAnalysis&Design【TheObserverPattern】2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright2WeatherMonitoringoverviewStatsForecastCurrentpullsdataWeatherDataobjectdisplaysWeatherStationOurclientprovidesWhatweimplementinternet2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright3WhatisWeatherDataobject?ItknowshowtotalktothephysicalWeatherStation,togetupdateddata.(wedon’tcareforthisprocess.)Itthenupdatesitsdisplaysforthethreedifferentdisplayelements.getsdataupdates它提供了三个方法(get开头),可以分别取得实时的温度、湿度和大气压力,还有一个MeasurementsChanged()方法,当任何天气状况发生变化的时候,这个方法都会自动被触发,当前这个方法只是一个空函数,扩展的代码还需要我们自己去扩充。2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright41.客户提供了获取实时的天气状况的方法2.MeasurementsChanged()方法会在天气状况变化时被自动调用。3.系统要实现三种显示模式,分别显示天气状况、天气统计和天气预测,而且这些显示的信息必须跟当前最新的天气状况实时同步。4.系统还必须支持在显示方式上的扩展性,而且使用者可以任意添加和移除不同的显示模式。2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright5//伪代码publicclassWeatherData{//实例化显示设备(省略)publicvoidMeasurementsChanged(){floattemp=getTemperature();//取得温度floathumidity=getHumidity();//取得湿度floatpressure=getPressure();//取得气压currentConditionsDisplay.update(temp,humidity,pressure);//同步显示当前天气状况statisticsDisplay.update(temp,humidity,pressure);//同步显示天气统计信息forecastDisplay.update(temp,humidity,pressure);//同步显示天气预报信息}}2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright62020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright7Ourjobis:TocreateanappthatusestheWheatherDataobjecttoupdatethreedisplays.2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright8ThekerneloftheproblemWeatherDataobjecttoupdateifyourequiredisplayspublisherssubscriberstodeliverifyousubscribesubjectobjectobserverobjectstonotifyifyouobserve2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright9TheObserverPatternTheObserverPatterndefinesaone-to-manyrelationshipbetweenobjectssothatwhenoneobjectchangesstate,allofitsdependentsarenotifiedandupdatedautomatically.2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright10ClassdiagramforObserverPattern0..*SubjectregisterObserver()removeObserver()notifyObserver()InterfaceObserverupdate()Interface0..*Eachsubjectcanhavemanyobserversupdate()willbecalledwhentheSubject’sstatechanges.ThesemethodswillbecalledWhentoregisterasobservers,removethemselvesfromBeingobservers,orupdatealltheobserverswheneverstatechanges.2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright11TodevelopappfromtheinterfaceSubjectregisterObserver()removeObserver()notifyObserver()InterfaceObserverupdate()Interface0..*0..*ConcreteObserverupdate()ConcreteSubjectregisterObserver()removeObserver()notifyObserver()11Subject(被观察的对象接口)规定ConcreteSubject的统一接口;每个Subject可以有多个Observer;ConcreteSubject(具体被观察对象)维护对所有具体观察者的引用的列表;状态发生变化时会发送通知给所有注册的观察者。Observer(观察者接口)规定ConcreteObserver的统一接口;定义了一个update()方法,在被观察对象状态改变时会被调用。ConcreteObserver(具体观察者)维护一个对ConcreteSubject的引用;特定状态与ConcreteSubject同步;实现Observer接口,通过update()方法接收ConcreteSubject的通知。2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright12顺序图2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright132020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright14DesigningtheWeatherStationExercise:ASpringTourplanSpringtourplanmanagesystemneedtomaintainacollectionoftheparticipantsNotifyallmembersoftheinformationabouttheplanEachmemberhavetheirownarrivalatthepointofcollection2020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright152020年1月29日星期三NeusoftComputerScienceandTechnologyDepartmentcopyright16ClassisoverReworkingtheWeatherStationwiththeJava’sbuilt-inObserverPattern!
本文标题:面向对象系统分析与设计_观察者模式
链接地址:https://www.777doc.com/doc-3373876 .html