第五篇 驱动方法 第十六章 - 观察者模式
如果说状态模式以状态的切换驱动了对象自身的行为变化,那么观察者模式将对象状态改变的消息发送给了其他对象,从而引起它们的联动反应。
我们引用朱自清先生的散文《春》,看看观察者模式的写法。
// 花(被观察者)
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 内置的观察者模式支持工具。
“蜜蜂”和“蝴蝶”作为“花”的观察者,时刻留意着“花”的状态,一旦收到“花”状态改变(春暖花开)的消息,它们就会忙碌起来。
观察者模式的巧妙之处在于“一方变化,八方呼应。”
浙公网安备 33010602011771号