- RxJava已经更新到RxJava3了,本文采用Rxjava2学习。
官网操作符列表
前言
RxJava 是一种被扩展的观察者模式,由被观察者(Observable)订阅 观察者(Observer)。
Github RxJava
1.什么是观察者模式
简述:观察者模式是由被观察者和观察者组成,通过被观察者发送通知,观察者接收到通知处理自己的事情。
1.1 传统观察者模式(一个被观察者,n个观察者)
打个比方:(这里我们用程序Bug和开发人员举列子,大家平时都是用警察和小偷 都听腻了吧 哈哈。)
这里被观察者是一个Bug,观察者是开发着,在观察者模式中,当Bug发生了,产生异常,然后通知到n个开发人员,
开发修复Bug
这里用java.utils包中给我们提供的Observable和Observer来实现一个传统的观察者模式的例子
被观察者(bug)
/***
* 被观察者 bug
*/
public class Bug extends Observable {
public void postBug() {
setChanged(); //发生改变
notifyObservers("Bug"); //通知观察者
}
}
观察者(开发人员)
/**
* 观察者 开发人员
*/
public class Develop implements Observer {
private String developName;
public Develop(String developName) {
this.developName = developName;
}
@Override
public void update(Observable o, Object arg) {
handMessage(arg);
}
public void handMessage(Object arg) {
System.out.println(developName + " 收到了一个 " + arg);
}
}
调试
public class TestObservable {
public static void main(String[] args) {
Bug bug = new Bug();
Develop develop1 = new Develop("小张");
Develop develop2 = new Develop("小李");
Develop develop3 = new Develop("小王");
Develop develop4 = new Develop("小红");
//让被观察着和观察者建立关系
bug.addObserver(develop1);
bug.addObserver(develop2);
bug.addObserver(develop3);
bug.addObserver(develop4);
//写一个bug
bug.postBug();
}
}
输出结果
小红 收到了一个 Bug
小王 收到了一个 Bug
小李 收到了一个 Bug
小张 收到了一个 Bug
这里的输出是后进先出的原则,最后一个添加进去的观察着最先被通知到。
1.2 Rxjava观察者模式(一个被观察者(可变),一个观察者)
打个比方(比方都要哭了 就打他。)
还是以bug和开发人员的例子分析。
由于Rxjava是被修改后的观察者模式,所以这个地方就没有多个开发人员来接收了。
当bug发生以后,最简单的就是直接通知到开发者,复杂一点的就是上面提到的可变,这个后面再讲)
看个实际的例子
//bug
Observable<String> bug = Observable.create(new ObservableOnSubscribe<String>() {
@Override
public void subscribe(ObservableEmitter<String> emitter) throws Exception {
//发送bug
emitter.onNext("bug");
}
});
//开发
Observer<String> develop = new Observer<String>() {
@Override
public void onSubscribe(Disposable d) {
//订阅成功后回调
}
@Override
public void onNext(String s) {
//接收bug
Log.i(TAG, "onNext: 开发人员接收到了 -- "+s);
}
@Override
public void onError(Throwable e) {
//发生错误时候回调
}
@Override
public void onComplete() {
//完成以后回调(和onError只可能出现一种)
}
};
//订阅
bug.subscribe(develop);
打印结果
I/MainActivity: onNext: 开发人员接收到了 -- bug
1.3 总结
传统的观察者模式,一个被观察者,对应多个观察者
Rxjava观察者模式,一个被观察者,一个观察者(一个起点上游,一个终点下游)
我们这里只需要了解到这2个不同之处就行了,后面接着我们会继续温故知新RxJava的各种使用。