import java.util.Observable;
import java.util.Observer;
/**
* 观察者模式(JDK实现)。
* @author Bright Lee
*/
public class JdkObserverPattern {
public static void main(String[] args) {
AnimalKeeper subject = new AnimalKeeper(); // 饲养员(主题)
Observer tiger = new Tiger(); // 老虎
Observer bear = new Bear(); // 狗熊
Observer fox = new Fox(); // 狐狸
subject.addObserver(tiger); // 把老虎设为观察者
subject.addObserver(bear); // 把狗熊设为观察者
subject.addObserver(fox); // 把狐狸设为观察者
subject.setChanged();
subject.notifyObservers("快来吃饭!"); // 饲养员通知所有观察者
System.out.println("==================");
subject.deleteObserver(bear); // 把狗熊从观察者名单中移除
subject.setChanged();
subject.notifyObservers("快来喝水!"); // 饲养员再次通知所有观察者
}
}
class AnimalKeeper extends Observable {
public void setChanged() {
super.setChanged();
}
}
class Tiger implements Observer {
public void update(Observable o, Object msg) {
System.out.println("老虎收到通知:" + msg);
}
}
class Bear implements Observer {
public void update(Observable o, Object msg) {
System.out.println("狗熊收到通知:" + msg);
}
}
class Fox implements Observer {
public void update(Observable o, Object msg) {
System.out.println("狐狸收到通知:" + msg);
}
}
打印结果如下:
狐狸收到通知:快来吃饭!
狗熊收到通知:快来吃饭!
老虎收到通知:快来吃饭!
==================
狐狸收到通知:快来喝水!
老虎收到通知:快来喝水!