文章目录
  1. 1. 观察者模式
  2. 2. UML图和详细介绍
  • 自定义方式
  • 通过java中Observer类库实现
  • 观察者模式

    定义了对象之间的一对多依赖,这样一来,当一个对象改变状态时,它的所有依赖者都会收到
    通知并自动更新

    UML图和详细介绍

    自定义方式

    alt text

    • 通过 Weather主题接口中的addObserver注册为观察者
    • 其中WeatherType为具体的天气类型
      public enum WeatherType {

      SUNNY, RAINY, WINDY, COLD;

      @Override
      public String toString() {
      return this.name().toLowerCase();
      }
      }

    • WeatherObserver具体的观察者可以是实现此接口的任意类。

    public interface WeatherObserver {

    /**

    • 更新
    • @param currentWeather
      */
      void update(WeatherType currentWeather);

    }

    通过java中Observer类库实现

    public abstract class Observable, O extends Observer, A> {

    protected List observers;

    public Observable() {
    this.observers = new CopyOnWriteArrayList<>();
    }

    public void addObserver(O observer) {
    this.observers.add(observer);
    }

    public void removeObserver(O observer) {
    this.observers.remove(observer);
    }

    /**

    • Notify observers
      */
      @SuppressWarnings(“unchecked”)
      public void notifyObservers(A argument) {
      for (O observer : observers) {
      observer.update((S) this, argument);
      }
      }
      }
    • 在java中还有很多地方用到了观察者模式,比如在IO中,javaBeans,其中观察者模式在对象之间定义
      一对多的依赖,这样一来,当一个对象改变状态,依赖它的对象都会收到通知,并自动更新