📄 weatherreport.java
字号:
package WeatherReport;
import java.util.ArrayList;
/*观察者模式:定义了对象之间一对多的依赖,这样一来,
* 当一个对象状态发生改变时,它的所有依赖者都会收到通知并自动更新
*
* 主题对象有注册,移除,通知观察者三个功能,观察者有一个成员变量保存一个主题的引用
* */
//原始设计:外界给接口获知气象数据(温度湿度气压等),根据气候数据的变化计时更新几个不同的布告牌,可参看P42的原始设计代码
//新的设计,采用观察者模式,气象数据更新后通知布告牌更新显示
interface Subject{
public void registerObserver(Observer o);
public void removeObserver(Observer o);
public void notifyObservers(); //主题改变状态时将通知所有观察者
}
interface Observer{
public void update(float temp, float humidity, float pressure); //主题改变状态时,将三个参数传给观察者
}
interface DisplayElement{
public void display();
}
class WeatherData implements Subject{
private ArrayList observers;
private float temperature;
private float humidity;
private float pressure;
public WeatherData(){
observers = new ArrayList();
}
public void registerObserver(Observer o){//
observers.add(o);
}
public void removeObserver(Observer o){
int i = observers.indexOf(o);
if(i>=0){
observers.remove(i);
}
}
public void notifyObservers(){
for(int i=0; i<observers.size(); i++){
Observer o = (Observer)observers.get(i);
o.update(temperature, humidity, pressure);
}
}
public void setMeasurements(float temp, float humidity, float pressure){
this.temperature = temp;
this.humidity = humidity;
this.pressure = pressure;
measurementChanged();
}
public void measurementChanged(){ //给外界的接口
notifyObservers();
}
}
//其中的一个布告板,显示温度湿度
class CurrentConditionDisplay implements Observer, DisplayElement{
private float temperature;
private float humidity;
private Subject weatherData;
public CurrentConditionDisplay(Subject wd){
this.weatherData = wd;
this.weatherData.registerObserver(this);
}
public void update(float temp, float humidity, float pressure){
this.temperature = temp;
this.humidity = humidity;
display();
}
public void display(){
System.out.println("当前天气状况:");
System.out.println("温度:"+this.temperature+"摄氏度, 湿度:"+this.humidity+"%");
}
}
//其他的布告板...
public class WeatherReport {
public static void main(String[] args) {
WeatherData weatherData = new WeatherData();
CurrentConditionDisplay ccd = new CurrentConditionDisplay(weatherData);
weatherData.setMeasurements(20, 10, 30);
weatherData.setMeasurements(30, 60, 10);
}
}
Vector<int> ver;
Vector<int>:iterator itr;
i.push_back(1);
ver[0]
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -