敲碎时间的人的个人专栏
上一篇

Rx初步理解

广告
选中文字可对指定文章内容进行评论啦,→和←可快速切换按钮,绿色背景文字可以点击查看评论额。
大纲

这一节我们来理解Rx的一些基本概念:


1、什么是Rx?

首先,官网的介绍是:

An API for asynchronous programming with observable streams

我们对这段话的理解有三个层次:

1、An API:它首先是一个编程接口规范,不同的语言有不同的实现,但是API接口应该是一致的。

2、For asynchronous programming:在异步编程中使用。比如子线程耗时网络请求。

3、With observable streams: 基于可观察的事件流。比如观察者模式中的观察者对被观察着的监听。

 

其核心设计思想:观察者模式Iterator 模式函数式编程

观察者模式:即定义对象间一种一对多的依赖关系,当一个对象改变状态时,则所有依赖它的对象都会被改变。

Iterator 模式: 即迭代器模式。

函数式编程:即提供一系列函数样式的方法供快速开发。

 

2、什么是响应式编程?

A = B + C

比如上面的代码A被赋值为BC的和,在传统的命令式编程中,如果我们修改了B或者C的值,当这段代码已经执行之后,A的值并不会发生变化。而如果我们运用一种机制,当B或者C的值发现变化的时候,A的值也随之改变,这样就实现了”响应式“。也可以叫做数据绑定。

 

3、什么是函数式编程?

函数式编程思维, 就是 用计算(函数)来表示程序, 用计算(函数)的组合来表达程序的组合的思维方式.

这里用一段伪代码的说明

/ 传统
int abs(int i) {
    return i * 2;
}

int add_abs(int a, int b) {
    return abs(a) + abs(b)
}

int result = add_abs(2, 3);

// 函数式
def abs = {i -> i * 2} // 传入 i 返回 i*2
def add_abs = {(a, b) -> abs(a)+abs(b)} // 传入a,b ,返回经过 a*2 + b*2 的值
int a = add_adb(1, 2)

4、函数响应式编程

如果结合响应式和函数编程,那么就会有一些有意思的事情发生啦。

例子:我们如果有一个输入框,输入的文字达到预期时,弹出提示框。

传统的话我们的话会给这个输入框添加一个监听事件,用于监听文字的输入,然后在监听方法中,去做判断是否需要弹出提示框。

input.setInputListener(inputListener) // 设置输入监听

void inputListener(input) {
    if (!input.text.isEmpty()) {
            if input.text.count >= 100 {
                alert.show("不能输入更多了")
            } 
    }   
}

如果我们使用函数响应式编程的话,就可以用一下代码来表示

input.text
    .isEmpty
    .map {text.count >= 100} // 
    .bind {alert.show("不能输入更多了")}

这样就实现了输入与提示框的绑定。

而 Rx(RxJava) 的原理就是这种模式,在这个模式中有 4 个角色

角色作用
被观察者(Observable)产生事件
观察者(Observer)接收事件,并给出响应动作
订阅(Subscribe)连接 被观察者 & 观察者
事件(Event)被观察者 & 观察者 沟通的载体

在Rx中还有一个概念叫做Subject,它既是可监听序列也是观察者。它同时充当了 Observer 和 Observable 的角色。因为它是一个 Observer,它可以订阅一个或多个 Observable ;又因为它是一个 Observable ,它可以转发它收到( Observe )的数据,也可以发射新的数据。

我们以后再来慢慢分析这些基本的概念:欢迎讨论

 

 

 

版权声明:著作权归作者所有。