当前位置:文档之家› Java面向对象分析案例

Java面向对象分析案例


WeatherData
getTemperature() getHumidity() getPressure() measurementsChanged()
//other methods
/* 当气象测量数据改变时 调用该方法 */
Public void measurementsChanged(){
//在此编写你的代码
WeatherData 获得最 新的气 象数据
getTemperature() getHumidity() getPressure() measurementsChanged()
Public void measurementsChanged() { float temp=getTemperature(); float humidity = getHumidity(); float pressure=getPressure(); //other methods currentConditionDisplay.update(temp,humidity,pressure); statisticsDisplay.update(temp,humidity,pressure); forecastDisplay.update(temp,humidity,pressure);
display()
CurrentconditionsDisplay
StatisticsDisplay
ThirdPartyDisplay
update() Display(){ //display current //measurements
update() Display(){ //display average,… //measurements
还是针对接口编 程?
} //其他方法 }
动态增加或取消 某类报告吗?
8.Weather-O-Rama Weather Station
10
我们的问题在那里?
Public class WeatherData { //声明示例变量 Public void measurementsChanged() { 由于是对具体实现的 float temp=getTemperature(); 编程,所以不修改程 float humidity = getHumidity(); 序我们无法增加或删 float pressure=getPressure(); 除报告 currentConditionDisplay.update(temp,humidity,pressure); statisticsDisplay.update(temp,humidity,pressure); forecastDisplay.update(temp,humidity,pressure); } //其他方法 }
3
需求分析:-乙方的工作及要求
需要乙方建立一个应用,有三种布告板 目前状况(温度,湿度,气压值显示)的布告 气象统计(如平均温度,平均湿度、最高温度等) 简单预报(短时间内的天气预报)
要求 三个布告板必须在WeatherData对象获取新数据后 立刻更新。 该应用应该支持扩展,乙方应该提供API,以便其 他的程序员写出自己的布告板,并插入到该系统中。 相关的设计和文档随应用程序一并交付。
1
New mission:
恭喜贵公司获选为敝公司建设下一代Internet气象观察站!该气
象站必须建议在我们专利申请中的WeatherData对象上,由 WeatherData对象负责追踪目前的天气情况(温度、湿度、气 压)。我们希望贵公司能建立一个应用,有三种布告板,分别显 示目前的状况、气象统计及简单的预报。当WeatherData获得最 新的测量数据时,三种布告板必须实时更新。
8.Weather-O-Rama Weather Station 18
Weather-O-Rama实现思路
《interface》Subject
看起来我们是需要用一个公用接口来 与现实报告打交道
8.Weather-O-Rama Weather Station
变 化 的 部 分 应 该 加 以 封 装
11
从生活中获得灵感
出版商 4
新报纸刊出 A A B C D E B C D
1:N
订阅者
3 2
E
1
8.Weather-O-Rama Weather Station
} //其他方法 }
调用每个报告对 象,更新显示
因为气象数据发 生变化时 measurementsCh anged()会自动被 执行,所以…
9
8.Weather-O-Rama Weather Station
这个解决方案好吗?
Public class WeatherData { //声明实例变量…
是针对实现编程
8.Weather-O-Rama Weather Station
4
需求分析:-乙方的回报
气象站(甲方)的运营方式

客户订阅气象站服务,客户订阅每个布告板都需要 付钱。
乙方完成任务后得到的回报 股权支付方式
8.Weather-O-Rama Weather Station
5
气象发布系统概况
各个公告板都应该有自己的显示方式,因此应该有一个display()
方法,参考Simuduck的例子,设计成接口
8.Weather-O-Rama Weather Station
14
实现思路-公告板接口设计
《interface》Observer 《interface》DisplayElement
update()
Public void measurementsChanged() { float temp=getTemperature(); 每增加一个新的 float humidity = getHumidity(); float pressure=getPressure(); 报告我们都必须 currentConditionDisplay.update(temp,humidity,pressure); 修改代码吗? statisticsDisplay.update(temp,humidity,pressure); 在运行时我们能 forecastDisplay.update(temp,humidity,pressure);
WeatherData registerObserver() removeObserver() notifyObserver()
geTemperature() getHumidity() getPressure() measurementsChanged()
中的方法之外,另外还 有Weather-O-Rama气 象站提供给我们的温度 湿度和压力的获取方法, 以及 measurementChanged 方法。这是气象站提供 的方法,可以在此方法 中调用notifyOberver方 法,实现通知用户更新 的目的。
8.Weather-O-Rama Weather Station 16
实现思路-WeatherData接口设计
针对接口编程,而不是针对具体编程,这样要
求我们对WeatherData类进行抽象,形成一 个接口。 因为WeatherData是“出版商”,因此需要
应该有添加用户的方法 应该有删除用户的方法

因为更新部分放到了用户,因此应该有通知用户读 取新数据的方法。
8.Weather-O-Rama Weather Station
17
实现思路-WeatherData接口设计
《interface》Subject
WeatherData除了接口
registerObserver() removeObserver() notifyObserver()
而且我们希望这是一个可扩展的气象站,Weather-O-Rama气象
站希望公布一组API,好让其他的开发人员写出自己的气象布告 板,并插入此应用中,希望贵公司提供这样的API
Weather-O-Rama气象站有很好的商业运行模式:一旦客户上钩,
他们使用布告板都要付钱。为了感谢贵公司建立此系统,我们将 以公司的股份作为支付。

其他开发者可以建立定制的报告,用户可以随意增 减他们需要的报告。目前,我们只知道三种报告类 型:当前天气情况、气象统计报告、天气预报。
8.Weather-O-Rama Weather Station 8
我们自然会想到下面的解决方案
Public class WeatherData { //声明实例变量…
12
OO jargon
在面向对象的语言中 出版商=Subject(主题) 订阅者=observer(观察者)
8.Weather-O-Rama Weather Station
13
实现思路-公告板接口设计
//各个公告板获得更新 currentConditionDisplay.update(temp,humidity,pressure); statisticsDisplay.update(temp,humidity,pressure); forecastDisplay.update(temp,humidity,pressure);
显示报告
天气预报: 明天下刀子, 请预备铁锅!
抽取数据 湿度传感器
气象站
温度传感器
WeatherData object
显示设备
气压传感器
有三种显 示报告
Weather-O-Rama提供的部分 我们要实现的部分
8.Weather-O-Rama Weather Station 6
Weather-O-Rama提供的WeatherData.java
我们的任务就是实现 measurementsChanged(),让他 更新当前天气、天气统计、天气 预报三种报告
相关主题