设计模式二之观察者模式学习笔记
观察者模式:定义了对象之间的一对多依赖,这样一来,当一个对象改变时,它的所有依赖者都会收到通知并自动更新。
业务需求如下:
需求
某公司有个气象装置,这个气象装置要通过温度、湿度、气压感应装置得到数据,然后通过一个系统
将天气状况显示在布告板上,暂时有三个布告板分别显示目前状况、气象统计和天气预报,要根据天气的变化及时更新布告板。
开始设计
开始的思路是只有两类对象,一类是气象站对象。一类是布告板对象。气象站通过某种手段获取数据,布告板与气象站组合,各个的布告板展现一个数据作为例子。
具体实现如下:
package headfirst.observer.old;
/**
* 气象站
*/
public class WeatherStation {
//湿度
private String humidity;
//温度
private String temperature;
//气压
private String pressure;
//还有一个方法当指标变化时或者定时任务,更新这些指标调用updateMeasure方法更新指标,不会写
//更新测量情况
public void updateMeasure(String humidity,String temperature,String pressure){
setHumidity(humidity);
setTemperature(temperature);
setPressure(pressure);
}
public String getHumidity() {
return humidity;
}
public void setHumidity(String humidity) {
this.humidity = humidity;
}
public String getTemperature() {
return temperature;
}
public void setTemperature(String temperature) {
this.temperature = temperature;
}
public String getPressure() {
return pressure;
}
public void setPressure(String pressure) {
this.pressure = pressure;
}
}
可以单独创建一个Display接口,里面有display()方法,Bload实现这个接口,这里面略去了。
package headfirst.observer.old;
/**
* 布告板抽象类
*/
public abstract class Bload {
//大小
public String size;
//电量,电压等等属性
public String Voltage;
public WeatherStation weatherStation;
protected Bload(WeatherStation weatherStation) {
this.weatherStation = weatherStation;
}
public abstract void display();
}
package headfirst.observer.old;
/**
* 湿度布告板类
*/
public class HumidityBload extends Bload{
protected HumidityBload(WeatherStation weatherStation) {
super(weatherStation);
}
@Override
public void display() {
System.out.println("湿度:"+weatherStation.getHumidity());
}
}
package headfirst.observer