|
|
|
package desginpattern.obverser;/* Demonstrate the Observable class and theObserver interface.NOTES: 被观察者的设计: 1.扩展Observable类. 2.如果它已经改变,必须调用setChanged()方法. 3.当它准备通知观察者时,必须调用notifyObserver(Object obj)或notifyObserver()方法,这将导致观察者的update()方法调用. 观察者的设计: 1.实现Observer接口. 2.改写此接口的唯一方法: void update(Observable observOb, Object arg) 3.参数observOb是被观察对象,arg是观察者传递过来的对象,此时可对它进行相应的处理.*/import java.util.*;//This is the observing class.class Watcher implements Observer { public void update(Observable obj, Object arg) {//改写此方法. System.out.println("update() called, count is " + ((Integer) arg).intValue()); //对传递进来的参数编程. }}//This is the class being observed.class BeingWatched extends Observable { void counter(int period) { for (; period >= 0; period--) { setChanged(); //先调用此方法. notifyObservers(new Integer(period)); //再通知,否则一切无用. try { Thread.sleep(100); } catch (InterruptedException e) { System.out.println("Sleep interrupted"); } } }}public class ObserverDemo { public static void main(String args[]) { BeingWatched observed = new BeingWatched(); Watcher observing = new Watcher(); /* Add the observing to the list of observers for observed object. */ observed.addObserver(observing); //把观察者(如果有多个)都添加进被观察者的订阅列表中. observed.counter(10); }} |
|