让对象保持消息灵通
需求
一个WeatherData对象负责追踪目前的天气状况(温度,湿度,气压)。希望你们能建立一个应用,有三种布告板,分别显示目前的状况、气象统计及简单的预报。当WeatherObject对象获得最新的测量数据时,三种布告板必须实时更新。而且,这是一个可以扩展的气象站,Weather-O-Rama气象站希望公布一组API,好让其他开发人员可以写出自己的气象布告板,并插入此应用中,我们希望能提供这样的API。
class WeatherData{
public int getTemperature(){
}
public int getHumidity(){
}
public int getPressure(){
}
public void measurementsChanged(){
//一旦气象测量更新,此方法会被调用
}
}
实现1
public class WeatherData {
// 实例变量声明
public void measurementsChanged() {
float temp = getTemperature();
float humidity = getHumidity();
float pressure = getPressure();
currentConditionsDisplay.update(temp, humidity, pressure);
statisticsDisplay.update(temp, humidity, pressure);
forecastDisplay.update(temp, humidity, pressure);
}
// 这里是其他WeatherData方法
}
缺点:
针对实现编程
对于每个新的显示,都得修改这份代码
没有办法在运行时添加/移除显示元素
没有封装改变的部分
观察者模式
观察者模式:定义对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到通知并自动更新;
有几种不同的实现方法,大多数围绕着包括主题和观察者接口的类设计
类图:
第四个设计原则:为了交互对象之间松耦合设计而努力。
标签:02,temp,WeatherData,观察者,模式,humidity,pressure,public From: https://www.cnblogs.com/yunshalee/p/17310807.html主题只知道观察者实现了某个接口(也就是Observer接口)
任何时候我们都可以增加新的观察者。也可以在任何时候删除某些观察者。
有新类型的观察者出现时,主题的代码不需要修改,
独立复用主题和观察者
改变主题/观察者其中一方,不会影响另一方