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 )的数据,也可以发射新的数据。

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

 

 

 

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

相关推荐

初识parcel

webpack是一个很好的web应用打包工具,但是使用webpack需要很多繁琐的配置。parcel则提供了一个零配置的方案,大大简化了使用web应用的工具的难度。Parcel特性Parcel有以下一些特性:1、相比于Webpack, Rollup以及Browserify,Parcel打包时间极快这是Parcel做的一个基准测试,基于一个合理大小的应用,包含1726个模块, 6

Tomcat 8.5新安装环境初步配置优化

下载安装Tomcatwget http://mirrors.hust.edu.cn/apache/tomcat/tomcat-8/v8.5.37/bin/apache-tomcat-8.5.37.tar.gztar zxf apache-tomcat-8.5.37.tar.gz -C /usr/localmv /usr/local/apache-tomcat-8.5.37 /usr/local/t

初识JPA

1、什么是JPA?        JPA的全称是Java Persistence API,翻译成中文就是java对象持久化应用程序接口。JPA是Sun公司在Java EE5中提出的java对象持久化应用程序接口。2、JPA的优势是什么?标准化对容器级特性支持简单易用,集成方便可媲美JDBC的查询能力支持面向对象的高级特性3、JPA的缺点是什么?性能不好?学习

理解CKEditor5的schema

我们知道,CKEditor5是一个用MVC架构设计的富文本编辑器。如上图所示,三层分别是:Model,Controller, View首先,第一个问题是schema属于那一层?经过官方文档的初步学习,我们可以看到:editor.model.schema; // -> The model's schema.因此,我们可以得出结论:schema属于模型层:其次我们需

初步理解RxJs

         学习是一个由浅入深的过程,如果能够理解并掌握二八原则(帕累托法则),那么我们对知识的学习定会事半功倍,甚至事半多倍。对基础知识的理解决定了对知识理解的深度。RxJs定义        RxJS是ReactiveX在JavaScript上的一个派生。ReactiveX是一个应用比较广泛的响应式

RxJs——subject理解一

什么是subject首先我们来理解什么是subject,按照官方的定义:A Subject is a special type of Observable that allows values to be multicasted to many Observers.Subjects are like EventEmitters.从定义我们看出subject就是一种允许发送值到多个观察者的特殊类型的

RxJs——Subject理解二

上一节我们对subject有了初步理解,今天我们继续学习subjectReplaySubject介绍这个ReplaySubject之前,我们说下一种使用场景1、我们创建一个subject2、在应用的某个地方,我们向subject推送值,但此时没有订阅3、在某个时点,有第一个观察者开始订阅4、我们期望观察者能接收之前主题推送的值(可能是全部值或者时其中一个)5、实际上啥都没发生,因为主题不能存储记忆

javascript——generator理解

最近在学习CK5的时候,遇到了一个函数:function* _getAllUpcastDefinitions( definition ) { if ( definition.model.values ) { for ( const value of definition.model.values ) { const model = { key: definition.model.key

RxJs——Subscription理解

我們前段時間學習了Observable相關的知識,今天我們學習另一個重要的概念:Subscription。首先,我們看看Subscription官方文檔的介紹如下:What is a Subscription? A Subscription is an object that represents a disposable resource, usually the execution of an