上一篇介绍了Rxjava中观察者模式的基本实现原理,本篇主要介绍Rxjava链式操作实现的基本原理,即一个事件发出后,经过多次逻辑操作,最后到完成订阅的过程。
       上篇中有一个事件原即被观察者observable和一个观察者observer,并完成订阅。而实际业务逻辑中一个事件原往往需要其他业务逻辑处理后最后才到订阅者手中,rxjava使用操作符来解决该问题,实现链式操作,简化逻辑,优化代码,实现线程切换等等。下面介绍其实现的基本原理。
        Rxjava的操作符非常多,如创建observable 的操作符create,just;类型转换map,flatmap;事件合并zip等。每个操作符对应有个继承抽象类Observable的被观察者类,每次使用操作符都会创建一个新observable,然后将多个observable链接起来,完成一系列复杂逻辑操作。那么他们是如何链接的呢?先上图:

rxjava 实战 rxjava原理_操作符

 

        如图所示,每个operator对应一个observable,都是Observable的子类,每次调用一次operator都会创建一个observable的对象,每个observable都有一个source(第一个obserable的source可空),存储上一个observable;还对应有一个observer,封存下游的observer,并实现自己的逻辑,如变换,线程切换等。最后一个observer通过subscribe订阅一个observer,subscribe中实际是调用subscribeActual方法完成业务逻辑和封装,没个实际的observable需要重写subscribeActual方法实现自己的逻辑和封装。然后再调用上游source的subscribe方法,并传入封装后的observer,直到第一个observable。第一个observable会创建事件源,然后调用observer的onnext方法将事件通知给observer,即下一个observable封装的observer。然后依次将事件传递下去,每个observer收到事件后都可以对事件进行一定处理再继续传递,直到最后一个observer,完成整个链式事件通知。
        第一篇文章没有使用任何操作符,而是直接new了一个匿名的observable对象,那么其source为空,事件源直接在subscribeActual方法中产生和触发。各种操作符真正的业务罗逻辑,或者说核心代码都是在其对应observable的subscribeActual方法和对应的observer中。后面文章会依次分析每个操作符的源码和实现原理,敬请期待……

-------------------------------------------