zoukankan      html  css  js  c++  java
  • 简单天气项目中观察者模式解析

    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)可进行广播通信,跨界面

  • 相关阅读:
    LNMP安装了哪些软件?安装目录在哪?
    mysql导入数据大小设置方法
    JavaScript中的execCommand()命令详解及实例展示
    【燕山星云】三十而立,四十不惑...这是我看过最好人生的解读
    es6入门教程完整版
    Fisher's exact test( 费希尔精确检验)
    R语言中的箱图介绍 boxplot
    matlab 中保存某几个变量
    matlab 在代码中,显示错误,退出程序
    matlab 设置横纵坐标刻度的字体!!
  • 原文地址:https://www.cnblogs.com/gezixu/p/9836057.html
Copyright © 2011-2022 走看看