ReactiveX-入门篇

来源:互联网 发布:如何还房贷最划算知乎 编辑:程序博客网 时间:2024/04/28 19:33

ReactiveX简介:

An API for asynchronous programming with observable streams。

分解一下这个句子:

  • API: 首先它是个编程接口,不同语言提供不同实现。例如JVM语言中的RxJava。
  • For asynchronous programming: 使用场景,异步变成环境中。
  • With observable streams: 基于可观察的事件流

事实上,在异步协作(编程)中,所有的协作都是基于事件机制,通过事件发布与订阅机制,实现双方的解耦。流的概念则与流式中的概念是一样的,流意味中源源不断,只要有流到来,就会启动相应的处理流程。

ReactiveX组合了以下3者:
1. 观察者模式:观察感兴趣的目标并在特定事件发生时做出反应。
2. Iterator模式:迭代,其实就是流式的概念,不断迭代、循环、处理。
3. 函数式变成: 在针对目标事件做出反应的时候,使用函数式编程的方式进行相应。

下面的动态图很形象地解释了Reactive:
这里写图片描述

下图更进一步解释Observable广播时间的机制:

这里写图片描述

RxJava例子

Java、JS、PHP、Scala等语言都针对ReactiveX提供了实现,这里以Java为例写一个简单的示例。

首先引入RxJava的maven依赖:

<dependency>    <groupId>io.reactivex</groupId>    <artifactId>rxjava</artifactId>    <version>1.1.6</version></dependency>

简单例子:

import rx.Observable;import rx.functions.Action1;public class RxTest {    public static void main(String[] args) {        hello("Brandon" , "Braney" , "world");    }    public static void hello(String... names) {        Observable.from(names).subscribe(new Action1<String>() {            @Override            public void call(String s) {                System.out.println("Hello " + s + "!");            }        });    }}

输出:

Hello Brandon!Hello Braney!Hello world!

Observable.from(T[] array)将数组转化为Observable对象,并将数组中的元素作为流对象元素发布。除了从数组外,还可以从Iterable、Future等对象转化为Observable。Observable对象是ReactiveX的核心,代表着被观察的对象,或者说是事件流的抽象。更多信息参考doc文档:http://reactivex.io/RxJava/javadoc/

from方法返回的是Observable对象,调用该对象的subscribe方法,可以订阅该对象,在该对象发布事件(item)时得到相应的调用。其中Action1表示一个参数的回掉,也就是call()方法带有一个参数。除了Action1,还有Action2,Action3,…ActionN.

参考

官网:http://reactivex.io/
Github:https://github.com/ReactiveX

0 0