冰川孤辰 2016-03-31
使用RxJava可以方便实现观察者模式,数据转换和线程之间通信
https://github.com/ReactiveX/RxJava
在Android中使用RxAndroid增加安卓主线程支持:
https://github.com/ReactiveX/RxAndroid
实际开发中在gradle中注册对应的依赖即可:
compile 'io.reactivex:rxandroid:1.1.0'
观察者模式一般要有两个对象:
1.被观察者:Obserable
2.观察者:Observer
观察者和被观察者绑定后,被观察者在某种事件发生时会向所有观察它的观察者发送事件,即调用观察者的回调函数。
使用java.util里的观察者应该是这样的:
import android.util.Log;
import java.util.Observable;
import java.util.Observer;
public class ObserverTest {
void test0() {
//创建被观察者
DemoObserable obserable = new DemoObserable();
//创建一个观察者
Observer observer1 = new Observer() {
//观察者接收到事件时的操作
@Override
public void update(Observable observable, Object data) {
Log.e("TAG", "ToObserver1: " + data);
}
};
//添加绑定
obserable.addObserver(observer1);
//被观察者发送事件
obserable.subscribe("Hello World!!");
//被观察者将观察者移除
obserable.deleteObserver(observer1);
}
//被监听者
public class DemoObserable extends Observable {
//被监听者发送数据给所有观察者
void subscribe(String data) {
setChanged();
notifyObservers(data);
}
}
}假设观察者有多个,可以依次注册,删除:
//创建被观察者
DemoObserable obserable = new DemoObserable();
//创建一个观察者
Observer observer1 = new Observer() {
//观察者接收到事件时的操作
@Override
public void update(Observable observable, Object data) {
Log.e("TAG", "ToObserver1: " + data);
}
};
//创建一个观察者
Observer observer2 = new Observer() {
//观察者接收到事件时的操作
@Override
public void update(Observable observable, Object data) {
Log.e("TAG", "ToObserver2: " + data);
}
};
//添加绑定
obserable.addObserver(observer1);
obserable.addObserver(observer2);然而,我们接下来使用 rx.Observer, rx.Observable, 思想也是类似的: