冰川孤辰 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, 思想也是类似的: