rxjava设计解读

Observable作为入口类,包装了所有的操作功能。静态方法基本都是create方法

而所有的操作:map flatmap filter等等都通过包装模式实现。都继承自AbstractObservableWithUpstream。其内部通过protected final ObservableSource<T>

source对目标ObservableSource保持引用。

rxjava设计解读


图一 继承关系图

子类都通过如下方法:

public void subscribeActual(Observer t) {

source.subscribe(new MapObserver(t, function));

}

去创建一个继承了Observer的包装了,将传入的Observer进行包装,增加自定义功能。然后依然使用source.subscribe进行订阅;只是此时的Observer已经是被增强了的,比如过滤所有的onNext 将传入到值进行改变(map),进行过滤(filter)等等。


以下是深入源代码解读:

rxjava设计解读
图1 包装讲解




rxjava设计解读
图2





rxjava设计解读
图3 线程执行示意图







rxjava设计解读
图4 总结