Rxjava2入門教程一:函數(shù)響應(yīng)式編程及概述

如需下載源碼,請(qǐng)?jiān)L問(wèn)
https://github.com/fengchuanfang/Rxjava2Tutorial
文章原創(chuàng),轉(zhuǎn)載請(qǐng)注明出處:
Rxjava2入門教程一:函數(shù)響應(yīng)式編程及概述

Rxjava2Tutorial.png

RxJava是函數(shù)響應(yīng)式編程思想在java語(yǔ)言上的具體實(shí)現(xiàn)。RxJava2在這一實(shí)現(xiàn)下,對(duì)Rxjava1進(jìn)行了全面重寫,如果之前沒(méi)接觸過(guò)RxJava,可以直接從Rxjava2入門,而不需要了解RxJava1。
在使用RxJava2之前,對(duì)于Android開發(fā),需要在項(xiàng)目中添加以下依賴

    implementation "io.reactivex.rxjava2:rxjava:2.1.3"
    implementation 'io.reactivex.rxjava2:rxandroid:2.0.1'

函數(shù)響應(yīng)式編程函數(shù)式編程響應(yīng)式編程這兩大顛覆傳統(tǒng)的牛逼編程范式疊加后的產(chǎn)物,編程界的牛逼二次方。


響應(yīng)式編程(Reactive Programming):是一種面向數(shù)據(jù)流和變化傳播的一種編程范式。
響應(yīng)式編程的終極思想,一切皆流(everything is stream)。如同面向?qū)ο蟮木幊桃磺薪詫?duì)象一樣。根據(jù)唯物辯證法的思想,物質(zhì)世界是普遍聯(lián)系和不斷運(yùn)動(dòng)變化的統(tǒng)一整體,而一切‘運(yùn)動(dòng)變化’這一‘客觀現(xiàn)象’都可以通過(guò)數(shù)據(jù)流的方式進(jìn)行‘抽象描述’,也可以說(shuō),物質(zhì)世界是數(shù)據(jù)流的客觀存在。
在程序中一切變量,數(shù)組,集合,對(duì)象,事件都可以當(dāng)做數(shù)據(jù)流來(lái)發(fā)送處理。


函數(shù)式編程(Functional programming):是一種通過(guò)函數(shù)或者函數(shù)的組合調(diào)用來(lái)處理數(shù)據(jù),獲取結(jié)果的一種編程范式。
函數(shù)是函數(shù)式編程的核心,純函數(shù)高階函數(shù)是兩大重要的角色。
純函數(shù)具有相互獨(dú)立性和對(duì)外封閉性特點(diǎn),
1、純函數(shù)的返回結(jié)果只受函數(shù)參數(shù)的影響,如果輸入?yún)?shù)相同不論在哪調(diào)用,何時(shí)調(diào)用,調(diào)用多少次其輸出結(jié)果都是一樣的。
2、純函數(shù)內(nèi)部的數(shù)據(jù)處理不受外部環(huán)境的影響也不會(huì)影響外部環(huán)境,每一個(gè)函數(shù)內(nèi)部均有一套屬于自己的局部變量,只在本函數(shù)內(nèi)部調(diào)用也只在本函數(shù)內(nèi)部起作用,其取值由函數(shù)的初始參數(shù)決定,不受外部變量的影響,同時(shí)函數(shù)的計(jì)算結(jié)果只影響函數(shù)的返回值,不影響外部變量的值。
高階函數(shù)(Higher-order function):允許將函數(shù)作為參數(shù)傳入,或者將函數(shù)作為返回值返回的函數(shù)稱為高階函數(shù)。通過(guò)高階函數(shù)可以對(duì)純函數(shù)進(jìn)行傳遞,組合,鏈接等操作來(lái)解決單一函數(shù)無(wú)法解決的復(fù)雜問(wèn)題。


函數(shù)響應(yīng)式編程(Functional Reactive Programming:FRP):是一種通過(guò)一系列函數(shù)的組合調(diào)用來(lái)發(fā)射,轉(zhuǎn)變,監(jiān)聽,響應(yīng)數(shù)據(jù)流的編程范式。
在RxJava中,函數(shù)響應(yīng)式編程具體表現(xiàn)為一個(gè)觀察者(Observer)訂閱一個(gè)可觀察對(duì)象(Observable),通過(guò)創(chuàng)建可觀察對(duì)象發(fā)射數(shù)據(jù)流,經(jīng)過(guò)一系列操作符(Operators)加工處理和線程調(diào)度器(Scheduler)在不同線程間的轉(zhuǎn)發(fā),最后由觀察者接受并做出響應(yīng)的一個(gè)過(guò)程。
在RxJava2中,提供了五對(duì)觀察者模式組合來(lái)完成這一系列的過(guò)程,每一對(duì)組合依靠其可調(diào)用的一系列函數(shù)的差異,而具有各自的特點(diǎn)。
這五類組合(前為可觀察對(duì)象后為對(duì)應(yīng)的觀察者)分別是:
ObservableSource/Observer
可通過(guò)onNext方法發(fā)送單條數(shù)據(jù)或者數(shù)據(jù)序列,通過(guò)onComplete發(fā)送完成通知或通過(guò)onError發(fā)送異常通知,不支持背壓策略。
Publisher/Subscriber
在ObservableSource/Observer基礎(chǔ)上進(jìn)行了改進(jìn),可通過(guò)背壓策略處理背壓?jiǎn)栴},但效率沒(méi)有第一組高。
以下三組是新的響應(yīng)式關(guān)系的實(shí)現(xiàn),在Rxjava1中沒(méi)有,可看做是ObservableSource/Observer的簡(jiǎn)化版
SingleSource/SingleObserver
不能發(fā)送數(shù)據(jù)序列或完成通知,只能通過(guò)onSuccess方法發(fā)送單條數(shù)據(jù),或者通過(guò)onError發(fā)送異常通知
CompletableSource/CompletableObserve
不能發(fā)送任何形式的數(shù)據(jù)(單條數(shù)據(jù)或數(shù)據(jù)序列),只能通過(guò)onComplete發(fā)送完成通知或者通過(guò)onError發(fā)送異常通知
MaybeSource/MaybeObserver
可通過(guò)onSuccess發(fā)送單條數(shù)據(jù),通過(guò)onComplete發(fā)送完成通知或者通過(guò)onError發(fā)送一條異常通知

下一篇:Rxjava2入門教程二:Observable與Observer響應(yīng)式編程在Rxjava2中的典型實(shí)現(xiàn)

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容