RxJava+Retrofit (一) 什么是響應(yīng)式編程

本系列的七篇文章(目前完成進(jìn)度:2/7):
1砸彬、響應(yīng)式編程
2颠毙、觀察者模式及Rx基礎(chǔ)概念解釋
3、RxJava深入淺出
4砂碉、RxJava+Retrofit 的結(jié)合
5蛀蜜、RxJava的高階高階
6、Retrofit的高階應(yīng)用
7增蹭、總結(jié)


引子

關(guān)于什么是函數(shù)響應(yīng)式編程滴某,官方一點的解析是:響應(yīng)式編程是一種面向數(shù)據(jù)流和變化傳播的編程范式。是的滋迈,每個字我都看的懂霎奢,但是組合起來就我就不知道是什么意思了。
  好吧饼灿,其實我們把定語去掉幕侠,就變成了:響應(yīng)式編程就是編程范式。
  OK碍彭,編程范式懂了吧晤硕,類比一下數(shù)據(jù)庫的設(shè)計范式,我們知道庇忌,數(shù)據(jù)庫的設(shè)計范式是為了解決數(shù)據(jù)冗余等一系列問題的舞箍,數(shù)據(jù)庫不遵循范式設(shè)計也是可以正常運(yùn)行, 但是整個數(shù)據(jù)庫結(jié)構(gòu)就會變得非常丑陋漆枚,在日常維護(hù)的時候會引發(fā)一系列的問題创译。那么這個”異步數(shù)據(jù)流交互的編程范式“也是如此,不用也行墙基,只是用了的話就會賊舒服


一個例子

扯了挺多的软族,還沒進(jìn)入正題,我們再理一下残制,看了這么多立砸,我們總算是知道了:響應(yīng)式編程就是tm一種編程范式,遵循這個范式會讓我們的代碼結(jié)構(gòu)合理很多初茶。OK颗祝,很好,小兄弟悟性不錯恼布。

在解釋定語之前(解釋完就整個概念解釋完了喂ヽ(●-`Д′-)ノ)螺戳,我們先來一個場景:

因為程序員工作越來越難找,你去富士康做生產(chǎn)員工折汞。

你負(fù)責(zé)的是給蘋果手機(jī)裝屏幕倔幼,但是在安裝屏幕之前,這臺手機(jī)需要先給你的同事——張全蛋爽待,全蛋負(fù)責(zé)給手機(jī)裝電池损同,但是裝電池這工序還是比較耗時翩腐,而且你不知道什么時候裝好,于是有了這幾種方案:
  A膏燃、全蛋把裝電池的手機(jī)扔在一個籃子里茂卦,你定時去看那個籃子里面有沒有手機(jī),有就拿起來裝屏幕组哩,沒有就再先回去等龙,過一會再來看;
  B禁炒、你更全蛋約定而咆,你們兩個之間裝一個設(shè)備霍比,全蛋那里有一個按鈕幕袱,按一下你這邊的那個燈就閃一下,然后你就知道有手機(jī)準(zhǔn)備好裝屏幕了悠瞬。此外们豌,全蛋哪里還順手裝多了一個按鈕,按一下你這邊紅燈就會亮浅妆,你就知道出問題了(比如說有一臺Note7混進(jìn)來了)望迎,你就去處理一下這個問題。

你看完這兩個方案以后凌外,男默女淚辩尊,老子可是程序員出身啊,一看就知道方案B是異步康辑,肯定是方案B好吧阌!
  于是工廠用了方案B疮薇,你欣慰地笑了胸墙,然后繼續(xù)回去裝手機(jī)屏幕。直到有一天按咒,你發(fā)現(xiàn)原來整個生產(chǎn)流程不只是 裝電池-裝屏幕這么簡單迟隅,還有裝天線、裝攝像頭等等一系列的流程励七,于是你略一沉思智袭,用代碼模擬了大概的流程:

void 生產(chǎn)手機(jī)(){
    手機(jī) phone = 手機(jī)模版.build("iphone");

    裝天線(phone){
        onSuccess(){
            裝攝像頭(phone){
                onSuccess(){
                    裝電池(phone){
                        onSuccess(){
                            continue();
                            ....
                        }
                    
                        onFailure(){
                            handleError();
                            ...
                        }
                    }
                }
                    
                onFailure(){
                    print(msg);
                }
            }
        }
                    
            onFailure(msg){
                    print(msg);
            }
        }
    }

寫完以后,你哭了(好吧我也哭了)掠抬。這巨tm丑哇大哥吼野!這樣的代碼你還有維護(hù)的欲望?然后你發(fā)現(xiàn)剿另,原來廠里面已經(jīng)是信號燈閃來閃去了箫锤,要修改生產(chǎn)流程贬蛙,要順著燈的指引找下去,找到之后還要balabala地引導(dǎo)員工....(各位兄弟可以嘗試修改一下上面的代碼谚攒,需求很簡單阳准,我要“裝電池”和“裝天線”兩個步驟對換一下,里面的回調(diào)函數(shù)也是需要調(diào)換的喔)

在你哭泣的時候,你忽然想到了一個東西——流水線A蟪簟R坝!括儒!于是你給出了一個方案:
  1绕沈、廠內(nèi)引進(jìn)流水線,讓生產(chǎn)員工坐在流水線旁邊帮寻;
  2乍狐、工人完成自己的工序以后,就把手機(jī)放到流水線上面固逗,讓下一個兄弟繼續(xù)加工浅蚪;
  3、在流水線上的員工烫罩,沒有事做的時候可以睡大覺惜傲,這條智能的流水線會在手機(jī)流到你的崗位的時候?qū)δ沩懤龋涯銌拘哑饋砉ぷ鳎?br>   4贝攒、如果在工人加工的過程中盗誊,發(fā)現(xiàn)了問題(比如混入了Note7),那個員工就在手機(jī)上面貼上一個紅色的貼紙隘弊,讓后面有能力處理的員工來處理這個問題哈踱。

實際上員工會盯著流水線,但是在我們的編程中长捧,不可能這樣嚣鄙,因為上一步操作的耗時是不可預(yù)知的,不停輪詢實在是太蠢了串结。在實際的代碼實現(xiàn)中哑子,還是采用了異步的思想。放回這個例子中肌割,就是沒事做的時候你可以睡大覺卧蜓,當(dāng)上一件產(chǎn)品流到你這里的時候,“智能流水線”就會在你這個位置響喇叭把敞,把你喚醒起來工作弥奸,甚至,當(dāng)你手頭上的工作還沒完成的時候奋早,流水線會停下來(阻塞))

于是你試圖使用代碼抽象一下這個過程:

    手機(jī)生成流水線.from(手機(jī)毛胚序列[])      //先把毛胚按序放到生產(chǎn)線上面
        .map(裝天線())
        .map(裝攝像頭())
        .map(裝電池())
        .map(裝屏幕())
        .subscribe(打包員);
        //這里的打包員是在生產(chǎn)線的尾端盛霎,將好的產(chǎn)品打包赠橙,將標(biāo)記了有問題的手機(jī)扔到一邊

(老板很滿意,于是給你晚飯加了雞腿)
  哇愤炸,簡直是藝術(shù)品啊期揪,大氣簡潔有木有。要維護(hù)這樣的代碼规个,別說了凤薛,老板再來十段!
  好了诞仓,現(xiàn)在我就跟你港缤苫,流水線生產(chǎn)就是函數(shù)響應(yīng)式編程!再讀一下響應(yīng)式編程的定義墅拭,”響應(yīng)式編程是一種面向數(shù)據(jù)流和變化傳播的編程范式活玲。“帜矾,小兄弟翼虫,現(xiàn)在懂了沒有哇屑柔。
  最后再多說一嘴吧屡萤,沒有流水線,工廠照樣生產(chǎn)掸宛,而且效率還不會很低死陆;但是有了流水線,工廠的生產(chǎn)就顯得非常規(guī)范通順唧瘾,這就是”范式"的魅力措译。


總結(jié)

本來還想說一下響應(yīng)式編程的好處和什么時候該用響應(yīng)式編程的,但是我不是很喜歡這種政治題式的總結(jié)饰序,所以我將問題拋給你們领虹,算是給大家在看完這玩意的一個總結(jié)吧:
  (就大家交流一下求豫,要是沒人回答我會很尷尬的塌衰,如果這些題目都做對的話就基本合格了)

一、判斷題
  1蝠嘉、響應(yīng)式編程不是異步操作最疆;
  1.5、響應(yīng)式是阻塞的蚤告;
  2努酸、只有特定的對象才能產(chǎn)生數(shù)據(jù)流;
  3杜恰、范式只是一種指導(dǎo)获诈,所以不使用范式并不會影響代碼的運(yùn)行(僅指運(yùn)行效果仍源,不涉及效率等其他指標(biāo));

二舔涎、簡答題
  1镜会、有如下幾個關(guān)于響應(yīng)式編程的定義,請逐個解釋并找出不正確的定義(可能有若干個):
    A终抽、響應(yīng)式編程是一種面向數(shù)據(jù)流和變化傳播的編程范式戳表。
    B、響應(yīng)式編程就是異步數(shù)據(jù)流交互的編程范式昼伴。
    C匾旭、響應(yīng)式編程就是 異步操作同步化。
    D圃郊、響應(yīng)式編程就是流水線

2价涝、響應(yīng)式編程的好處和什么時候該用響應(yīng)式編程。 (提示一下持舆,可能部分特性還沒講色瘩,但這道題也應(yīng)該能答出個大概)

3、給這篇博客評個分(10分滿分)逸寓,你給幾分居兆,為什么?(因為我預(yù)計這個系列還要寫個6篇的竹伸,所以你的意見非常重要)

4泥栖、自問自答(不必書面回答),你真的了解響應(yīng)式編程了嗎勋篓,你能不能給一個剛接觸編程的人解釋一下吧享?


未經(jīng)授權(quán),不得轉(zhuǎn)載譬嚣。
  原文地址:http://www.reibang.com/p/111e0a4b9b17

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末钢颂,一起剝皮案震驚了整個濱河市,隨后出現(xiàn)的幾起案子拜银,更是在濱河造成了極大的恐慌殊鞭,老刑警劉巖,帶你破解...
    沈念sama閱讀 206,968評論 6 482
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件盐股,死亡現(xiàn)場離奇詭異钱豁,居然都是意外死亡,警方通過查閱死者的電腦和手機(jī)疯汁,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,601評論 2 382
  • 文/潘曉璐 我一進(jìn)店門牲尺,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事谤碳±?ǎ” “怎么了?”我有些...
    開封第一講書人閱讀 153,220評論 0 344
  • 文/不壞的土叔 我叫張陵蜒简,是天一觀的道長瘸羡。 經(jīng)常有香客問我,道長搓茬,這世上最難降的妖魔是什么犹赖? 我笑而不...
    開封第一講書人閱讀 55,416評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮卷仑,結(jié)果婚禮上峻村,老公的妹妹穿的比我還像新娘。我一直安慰自己锡凝,他們只是感情好粘昨,可當(dāng)我...
    茶點故事閱讀 64,425評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著窜锯,像睡著了一般张肾。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上锚扎,一...
    開封第一講書人閱讀 49,144評論 1 285
  • 那天吞瞪,我揣著相機(jī)與錄音,去河邊找鬼工秩。 笑死尸饺,一個胖子當(dāng)著我的面吹牛,可吹牛的內(nèi)容都是我干的助币。 我是一名探鬼主播,決...
    沈念sama閱讀 38,432評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼螟碎,長吁一口氣:“原來是場噩夢啊……” “哼眉菱!你這毒婦竟也來了?” 一聲冷哼從身側(cè)響起掉分,我...
    開封第一講書人閱讀 37,088評論 0 261
  • 序言:老撾萬榮一對情侶失蹤俭缓,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后酥郭,有當(dāng)?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體华坦,經(jīng)...
    沈念sama閱讀 43,586評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,028評論 2 325
  • 正文 我和宋清朗相戀三年不从,在試婚紗的時候發(fā)現(xiàn)自己被綠了惜姐。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 38,137評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖歹袁,靈堂內(nèi)的尸體忽然破棺而出坷衍,到底是詐尸還是另有隱情,我是刑警寧澤条舔,帶...
    沈念sama閱讀 33,783評論 4 324
  • 正文 年R本政府宣布枫耳,位于F島的核電站,受9級特大地震影響孟抗,放射性物質(zhì)發(fā)生泄漏迁杨。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,343評論 3 307
  • 文/蒙蒙 一凄硼、第九天 我趴在偏房一處隱蔽的房頂上張望仑最。 院中可真熱鬧,春花似錦帆喇、人聲如沸警医。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,333評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽预皇。三九已至,卻和暖如春婉刀,著一層夾襖步出監(jiān)牢的瞬間吟温,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,559評論 1 262
  • 我被黑心中介騙來泰國打工突颊, 沒想到剛下飛機(jī)就差點兒被人妖公主榨干…… 1. 我叫王不留鲁豪,地道東北人。 一個月前我還...
    沈念sama閱讀 45,595評論 2 355
  • 正文 我出身青樓律秃,卻偏偏與公主長得像爬橡,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子棒动,可洞房花燭夜當(dāng)晚...
    茶點故事閱讀 42,901評論 2 345

推薦閱讀更多精彩內(nèi)容