java 提供Observable 抽象类和observer接口为开发者实现观察者模式提供便利,下面是一个例子。
观察者
import java.util.*;
public class myobserver implements Observer{
private int id;
private static int count=0;
public myobserver(Observable observable)
{
//观察者将自己注册到被观察者
observable.addObserver(this);
id=count++;
}
@Override
public void update(Observable o, Object arg) {
// TODO Auto-generated method stub
System.out.println("观察者"+id+"观察到的数据:"+((myobservable) o).getVar());
}
}
被观察者
import java.util.*;
public class myobservable extends Observable{
private int var;//观察者需要观察的数据
public int getVar() {
return var;
}
public void setVar(int var) {
this.var = var;
this.setChanged();//标记被观察者状态已改变
this.notifyObservers();//内部会调用observer的update()方法
}
public static void main(String[] args)
{
myobservable observable=new myobservable();
new myobserver(observable);
new myobserver(observable);
new myobserver(observable);
observable.setVar(2);
observable.setVar(-9);
}
}
结果
观察者2观察到的数据:2
观察者1观察到的数据:2
观察者0观察到的数据:2
观察者2观察到的数据:-9
观察者1观察到的数据:-9
观察者0观察到的数据:-9