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
- ReactiveX-入门篇
- ReactiveX
- ReactiveX
- Reactivex.js
- ReactiveX java
- ReactiveX--响应式编程
- 初识Android的ReactiveX
- ReactiveX/RxJava文档中文版
- ReactiveX文档中文翻译
- ReactiveX文档中文翻译
- ReactiveX Observable规范
- ReactiveX/RxJava文档中文版
- ReactiveX(rxjava)学习笔记
- 【ReactiveX】介绍(译)
- ReactiveX/RxSwift 初见
- ReactiveX文档中文翻译
- ReactiveX/RxJava文档中文版
- io.reactivex.exceptions.UndeliverableException
- .NET Core系列 : 1、.NET Core 环境搭建和命令行CLI入门
- SQLServer 请验证实例名称是否正确并且 SQL Server 已配置为允许远程连接 解决方法
- HDU 5289 Assignment (尺取+Set)
- JavaWeb开发入门(二)
- 关于jqGrid表格重新加载的问题
- ReactiveX-入门篇
- Sublime Text3 快捷键汇总
- 第11期《ON THE WAY》2016年7月刊
- 【2006】求N!的精确值
- plsql 实现表的创建以及增删改查。
- [Cloud Computing]Mechanisms: Certificate Trust Store
- iOS开发72-iOS 使用NSStringFromCGRect打印CGRect
- 洛谷 P1197 [JSOI2008]星球大战
- 几种常用的设计模式介绍