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

      }

    }

  • 相关阅读:
    次小生成树
    [bzoj5329] P4606 [SDOI2018]战略游戏
    CF487E Tourists
    P3225 [HNOI2012]矿场搭建
    CF #636 (Div. 3) 对应题号CF1343
    P3469 [POI2008]BLO-Blockade
    大假期集训模拟赛12
    大假期集训模拟赛11
    大假期集训模拟赛10
    小奇画画——BFS
  • 原文地址:https://www.cnblogs.com/zhuqiang/p/2469515.html
Copyright © 2011-2022 走看看