这里给出一个非常简单的例子,说明怎样使用JAVA所提供的对观察者模式的支持。在这个例子中,被观察对象叫做Watched;而观察者对象叫做Watcher。Watched对象继承自java.util.Observable类;而Watcher对象实现了java.util.Observer接口。另外有一个Test类扮演客户端角色。
源代码
被观察者Watched类源代码
public class Watched extends Observable{ private String data = ""; public String getData() { return data; } public void setData(String data) { if(!this.data.equals(data)){ this.data = data; setChanged(); } notifyObservers(); } }
观察者类源代码
public class Watcher implements Observer{ public Watcher(Observable o){ o.addObserver(this); } @Override public void update(Observable o, Object arg) { System.out.println("状态发生改变:" + ((Watched)o).getData()); } }
测试类源代码
public class Test { public static void main(String[] args) { //创建被观察者对象 Watched watched = new Watched(); //创建观察者对象,并将被观察者对象登记 Observer watcher = new Watcher(watched); //给被观察者状态赋值 watched.setData("start"); watched.setData("run"); watched.setData("stop"); } }
Test对象首先创建了Watched和Watcher对象。在创建Watcher对象时,将Watched对象作为参数传入;然后Test对象调用Watched对象的setData()方法,触发Watched对象的内部状态变化;Watched对象进而通知实现登记过的Watcher对象,也就是调用它的update()方法。