响应式编程入门

1. 响应式编程是对异步数据流编程

在响应式编程中,最重要的就是数据流(data starems)。事件、消息 和 方法调用,甚至异常都可以用数据流来表达,因此,响应式编程中,我们必须观察这些流,当数据流中有数据时,我们对此作出响应。

因此,我们要创建可以拥有任何事物的数据流,或在任何事物(如 点击事件、http 请求)可能要改变或发生时创建数据流。这样本质上它就拥有了异步特性。
响应式编程入门_第1张图片
Reactive eXtention(RX) 是对响应式编程理念的一个实现,就是使用可观察的序列组合异步编程和基于事件编程(compose asynchronous and event-based programs by using observable sequence)。使用 RX 编程,我们需要创建数据流,并订阅名为 Observable 的数据流,因此 reactive programming 只是一种编程理念,而 RX 通过结合观察者模式迭代器模式函数式编程,向我们提供了对这种理念实现的强大的工具包。RX 提供了许多函数用于操作数据流。下图展示了在 Java 中使用 RX(https://github.com/ReactiveX/RxJava)。
响应式编程入门_第2张图片

2. Observables Can Be Cold or Hot —— and it Matters

此时,我们可能需要明白在应用程序中我们要处理的流(或者说 observables)有什么不一样?在 reactive programming 中,数据流分两类:hotcold,理解它们之间的区别决定了是否正确使用了响应式编程。

cold observables are lazy。它们直到被 observing(在 RX 中,subscribe)时才会做实际的事情,类似于 java 提供的 lambda 表达式。cold stream 可以用于表达异步操作(asynchronous action)。由 cold stream 产生的数据流不会在订阅者(subscribers)之间共享。

hot stream 在被订阅之前,也一直在活跃中,这就像股票行情收录器。数据对于每个 subscriber 都是独立的,当一个 observer/subscriber 订阅 hot observable,它会得到之后所有数据流中被 emit 的数据,此数据被所有 subscriber 所共享。例如,即使没有人订阅温度器,但是它还是会测量温度,然后发布出去。而当一个 subscriber 订阅了此数据流,那么它就会自动收到下次测量温度。

你可能感兴趣的:(java)