手写Rx java基础框架(模型 模拟代码)

本文是自我学习用的kotln 手写 rx java 代码框架模型,并不包含rxjava的功能实现。

3个版本差别就是代码量而已。。。究极变态简化版本理解需要烧一烧脑子

一。第一版本。--完整好理解,内有注释

class rxjava1{

    //中转战--》上一个操作芙的返回值就是下一个操作符的入参
    //    ----》链式调用
    class Helper(private  var item :T) {

        //map放在里面是为了 可以链式调用
        fun  map(action :(T) ->R): Helper {
           val newItem = action(item)
            return Helper(newItem)
        }
        //思路: 消费,没有输出,只要接收上一个
        fun consumer(action:(T) ->Unit){
            action(item)
        }
    } //item 一直在更新


    //思路: 输入不需要考虑,因为最后一行作为流向输出的数据
    //总转站,helper 是为了保存我们create和map等等的输出数据
    fun create(action:() ->R):Helper{//--->这里是没有输入的,没有it。没有this,只有R,返回、
        val r =action()
        return Helper(r)
    }

    //================================================//
    //传递可以换成this,不使用it
    class Helper2(private  var item :T) {

        //map放在里面是为了 可以链式调用
        fun  map(action :T.() ->R): Helper2 {
            val newItem = action(item)
            return Helper2(newItem)
        }
        //思路: 消费,没有输出,只要接收上一个
        fun consumer(action:T.() ->Unit){
            action(item)
        }
    } //item 一直在更新


    //思路: 输入不需要考虑,因为最后一行作为流向输出的数据
    //总转站,helper 是为了保存我们create和map等等的输出数据
    fun create2(action:() ->R):Helper2{//--->这里是没有输入的,没有it。没有this,只有R,返回、
        val r =action()
        return Helper2(r)
    }


    fun main(){
        create {
            123
        }.map {
            "ssdd 数值 $it"
        }.map {
            "[$it]"
        }.consumer {
            println("rxjava1 。。。。$it")
        }

        ///this的好处,隐式的可以省略this
        create2 {
            123
        }.map {
            "ssdd 数值 $this"
        }.map {
            "[$this]"
        }.consumer {
            println("rxjava1 。。。。$this")
        }
    }

二。简化版本

        

    class Helper2(private  var item :T) {

        fun  map(action :T.() ->R)=Helper2(action(item))

        fun consumer(action:T.() ->Unit)=action(item)
    }

    fun create2(action:() ->R)=Helper2(action())

三。逆天简化版本,泛型的拷贝机制

//逆天简化版本,泛型的拷贝机制
fun create(action:() ->R):R = action() //把值保存到泛型R中
//T.map的T中会有create保存的R的值。--扩展函数特性
//this 就是T.map的T
fun  T.map(action :T.() ->R):R=action(this)
fun  T.consumer(action:T.() ->Unit)=action(this)

你可能感兴趣的:(java,kotlin,rxjava,框架)