转载自老罗安卓视频
API为我们提供了一个观察者接口Observer和一个被观察者类Observable,
1.定义一个被观察者类:
public class SimpleObserveable extends Observable {
private int data = 0;
public int getData() {
return data;
}
public int setData(int i){
if (i!=data){
//被观察者数据改变
data = i;
//设置改变
setChanged();
//通知观察者状态改变
notifyObservers();
}
return data;
}
}
2.定义观察者类:
public class SimpleObserver implements Observer {
//重写构造器,绑定被观察者
public SimpleObserver(SimpleObserveable observeable){
observeable.addObserver(this);
}
//重写update,在被观察者状态改变时会调用这个方法
@Override
public void update(Observable observable, Object o) {
//将参数中被观察者强转成我们自定义的被观察者,获得他的数据并输出
System.out.println(((SimpleObserveable)observable).getData());
}
}
3.进行测试:
public class MyTest {
public static void main(String[] args){
SimpleObserveable observeable = new SimpleObserveable();
SimpleObserver observer = new SimpleObserver(observeable);
observeable.setData(1);
observeable.setData(1);
observeable.setData(12);
observeable.setData(133);
//结果显示为
// 1
// 12
// 133
}
}
右键运行这个main方法。
逻辑也是比较清晰的,在观察者的构造方法中传入被观察者并让被观察者订阅观察者,当被观察者数据改变时自身调用setChanged和notify方法(两个都要调用)通知观察者,触发观察者的update.。这个update以被观察者作为参数,从而可以得到需要处理的被观察者。