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

      }

    }

  • 相关阅读:
    网上找的一个读取wave文件的代码片段
    用c++简单实现智能指针(转)
    剖析ifstream打开含中文路径名文件失败的原因(转)
    我是一个程序员
    .NET简谈委“.NET技术”托链 狼人:
    Entity Framework “.NET技术”4.1 推荐英文教程 狼人:
    Azure和Bing Maps API示“.NET技术”例经验分享 狼人:
    .NET中的异步编程“.NET技术”:使用F#简化异步编程 狼人:
    C#类类型“.NET技术” 狼人:
    Silverlight 应“.NET技术”用整合 狼人:
  • 原文地址:https://www.cnblogs.com/zhuqiang/p/2469515.html
Copyright © 2011-2022 走看看