前面我们自己编写观察者与被观察者类去实现观察者模式,其实,在java类库中,已经为我们写好了观察者(Observer)与被观察者(Observable),我们只需要实现或者继承就可以使用。
我们在里面声明一个data的数据,当data发生变化时,通知观察者。
其中setChanged();方法是标记被观察者的数据发生了变化
notifyObservers(); 是通知观察者
/**
* description:被观察者
* author: dujun
* created at: 2017/12/29 10:39
* update: 2017/12/29
* version:
*/
public class SimpleObservable extends Observable {
private int data = 0; // 被观察者的数据
public int getData() {
return data;
}
public void setData(int newData) {
if(newData != data){ // 判断data数据是否发生了变化
this.data = newData;
setChanged(); // 设置被观察者的数据发生了变化
notifyObservers(); // 通知观察者数据发生了变化
}
}
}
实现Observer接口的update(Observable observable, Object object)方法,当被观察者数据发生变化,此方法会被调用,我们在此方法中作数据变化后的业务逻辑处理。
/**
* description:观察者
* author: dujun
* created at: 2017/12/29 10:37
* update: 2017/12/29
* version:
*/
public class SimpleObserver implements Observer {
private SimpleObservable mObservable;
// 在构造方法中传入被观察者的实例对象
public SimpleObserver(SimpleObservable observable){
mObservable = observable;
}
/**
* 当被观察者的数据发生变化后,回调此方法
* @param observable
* @param object
*/
@Override
public void update(Observable observable, Object object) {
// 当被观察者的数据发生变化,此方法会被回调,在此作数据变化后的业务逻辑处理。
System.out.println("被观察者的数据发生了变化" + mObservable.getData());
}
}
我们编写Test类,运行我们的代码,步骤已经在注释中详细说明
/**
* description:
* author: dujun
* created at: 2017/12/29 10:48
* update: 2017/12/29
* version:
*/
public class Test2 {
public static void main(String [] args){
// 创建被观察者
SimpleObservable observable = new SimpleObservable();
// 创建观察者
SimpleObserver observer = new SimpleObserver(observable);
// 为被观察者添加观察者
observable.addObserver(observer);
// 设置数据
observable.setData(1);
observable.setData(3);
observable.setData(3);
observable.setData(5);
observable.setData(6);
observable.setData(6);
}
}
我们看到,但我们data数据变化的时候,才会通知观察者作出相应。
至此,观察者模式已经介绍完毕,后面将开始介绍RxJava的知识。请继续看下篇Rx_java的基本使用