第五篇 驱动方法 第十六章 - 观察者模式

  如果说状态模式以状态的切换驱动了对象自身的行为变化,那么观察者模式将对象状态改变的消息发送给了其他对象,从而引起它们的联动反应
  我们引用朱自清先生的散文《春》,看看观察者模式的写法。

// 花(被观察者)
public class Flower extends java.util.Observable {

  // 开花
  public void bloom() {
    // 桃树、杏树、梨树,你不让我,我不让你,都开满了花赶趟儿。
  }

  // 迎春
  public void meetSpring() {
    // 开花
    this.bloom();
    // 状态发生变化
    super.setChanged();
    // 发布消息,通知观察者们。
    super.notifyObservers("春天来了");
  }

}

// 蜜蜂(观察者)
public class Bee implements java.util.Observer {

  @Override
  public void update(java.util.Observable flower, Object msg) {
    // 花下成千成百的蜜蜂嗡嗡地闹着。
  }

}

// 蝴蝶(观察者)
public class Butterfly implements java.util.Observer {

  @Override
  public void update(java.util.Observable flower, Object msg) {
    // 大小的蝴蝶飞来飞去。
  }

}

// 测试类
public class Test {

  public void test() {
    // 被观察者(消息发布者)
    Flower obj = new Flower();
    // 加入观察者(消息订阅者)
    obj.addObserver(new Bee());
    obj.addObserver(new Butterfly());
    // 迎春
    obj.meetSpring();
  }

}

  这里的 java.util.Observable 和 java.util.Observer 是 Java 内置的观察者模式支持工具。
 “蜜蜂”和“蝴蝶”作为“花”的观察者,时刻留意着“花”的状态,一旦收到“花”状态改变(春暖花开)的消息,它们就会忙碌起来。
  观察者模式的巧妙之处在于“一方变化,八方呼应。”

posted on 2025-03-25 21:47  星辰河岳  阅读(18)  评论(0)    收藏  举报