转载自老罗安卓视频
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以被观察者作为参数,从而可以得到需要处理的被观察者。
本文通过实例演示了Java中如何使用观察者模式。首先定义了一个被观察者类SimpleObserveable,继承自Observable,用于存储数据并实现数据改变时的通知功能。接着定义了一个观察者类SimpleObserver,实现了Observer接口,并在构造函数中注册到被观察者上。当被观察者的数据发生改变时,会触发观察者的update方法。

被折叠的 条评论
为什么被折叠?



