简单天气项目中观察者模式解析

1、实例链接:https://github.com/BaronZ88/DesignPatterns/tree/master/src/com/baron/patterns/observer/observer

2、原理:

       在此项目中CurrentConditionsDisplay和ForecastDisplay为观察者,天气数据WeatherData为被观察者,被观察者通过Subject接口完成对观察者的注册、移除、和发送通知,观察者通过Observer和DisplayElement接口完成对自身数据的更新和显示,这样就可以完成实时显示天气数据和天气预报的功能。

3、实现:

@Override
  public void registerObserver(Observer observer) {
  this.observers.add(observer);
  }
 //注册观察者  
  @Override
  public void removeObserver(Observer observer) {
  this.observers.remove(observer);
  }
 //移除观察者  
  @Override
  public void notifyObservers() {
  for (Observer observer : observers) {
  observer.update();
  }
  }
 //发送通知  
 

                                                                                                          CurrentConditionsDisplay类:

@Override
  public void display() {
  System.out.println("当前温度为:" + this.temperature + "℃");
  System.out.println("当前湿度为:" + this.humidity);
  System.out.println("当前气压为:" + this.pressure);
  }
   
  @Override
  public void update() {
  this.temperature = this.weatherData.getTemperature();
  this.humidity = this.weatherData.getHumidity();
  this.pressure = this.weatherData.getPressure();
  display();
  }

                                                                                                         ForecastDisplay类:

@Override
  public void display() {
  System.out.println("未来几天的气温");
  int count = forecastTemperatures.size();
  for (int i = 0; i < count; i++) {
  System.out.println("第" + i + "天:" + forecastTemperatures.get(i) + "℃");
  }
  }
   
  @Override
  public void update() {
  this.forecastTemperatures = this.weatherData.getForecastTemperatures();
  display();
  }

4、好处

 (1)松耦合,抽象主题只和观察者有关

(2)可进行广播通信,跨界面

猜你喜欢

转载自www.cnblogs.com/gezixu/p/9836057.html