zoukankan      html  css  js  c++  java
  • Head First Design Patterns Observer Pattern

    The Observer Pattern defines a one-to-many dependency between objects so that when one

    object changes state, all of its dependents are notified and updated automatically.

    The Observer Pattern defines a one-to-many relatioship between objects.

    Design Principle

    • Strive for loosely coupled designs between objects that interact

    public interface Subject{

      public void registerObserver(Observer o);

      public void removeObserver(Observer o);

      public void notifyObservers();

    }

    public interface Observer{

      public void update(float temp, float humidity, float pressure);

    }

    public interface DisplayElement{

      public void display();

    }

    public 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 observer = (Observer)observers.get(i);

          observer.update(temperature, humidity, pressure);

        }

      }

      public void measurementsChanged(){

        notifyObservers();

      }

      public void setMeasurements(float temperature, float humidity, float pressure){

        this.temperature = temperature;

        this.humidity = humidity;

        this.pressure = pressure;

        measurementsChanged();

      }

    }

    public class CurrentConditionsDisplay implements Observer, DisplayElement{

      private float temperature;

      private float humidity;

      private Subject weatherData;

      public CurrentConditionsDisplay(Subject weatherData){

        this.weatherData = weatherData;

        weatherData.registerObserver(this);

      }

      public void update(float temperature, float humidity, float pressure){

        this.temperature = temperature;

        this.humidity = humidity;

        display();

      }

      public void display(){

        //do something

      }

    }

  • 相关阅读:
    Daily Coding Problem: Problem #994
    Android 开发绕不过的坑:你的 Bitmap 究竟占多大内存?(转)
    1087.Brace-Expansion (prime)
    Ant Design Vue照片墙a-upload
    echarts多条折线图添加单位
    任意文件下载包含https的图片
    错误:Linux环境jps: command not found
    SqlServer事务
    ADO.NET之连接池
    SqlServer全文索引在项目中的实际应用
  • 原文地址:https://www.cnblogs.com/zhuqiang/p/2469515.html
Copyright © 2011-2022 走看看