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

本系列的七篇文章(目前完成進度:2/7):
1、響應式編程
2、觀察者模式及Rx基礎概念解釋
3、RxJava深入淺出
4、RxJava+Retrofit 的結合
5、RxJava的高階高階
6、Retrofit的高階應用
7、總結


引子

關于什么是函數響應式編程,官方一點的解析是:響應式編程是一種面向數據流和變化傳播的編程范式。是的,每個字我都看的懂,但是組合起來就我就不知道是什么意思了。
  好吧,其實我們把定語去掉,就變成了:響應式編程就是編程范式。
  OK,編程范式懂了吧,類比一下數據庫的設計范式,我們知道,數據庫的設計范式是為了解決數據冗余等一系列問題的,數據庫不遵循范式設計也是可以正常運行, 但是整個數據庫結構就會變得非常丑陋,在日常維護的時候會引發一系列的問題。那么這個”異步數據流交互的編程范式“也是如此,不用也行,只是用了的話就會賊舒服


一個例子

扯了挺多的,還沒進入正題,我們再理一下,看了這么多,我們總算是知道了:響應式編程就是tm一種編程范式,遵循這個范式會讓我們的代碼結構合理很多。OK,很好,小兄弟悟性不錯。

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

因為程序員工作越來越難找,你去富士康做生產員工。

你負責的是給蘋果手機裝屏幕,但是在安裝屏幕之前,這臺手機需要先給你的同事——張全蛋,全蛋負責給手機裝電池,但是裝電池這工序還是比較耗時,而且你不知道什么時候裝好,于是有了這幾種方案:
  A、全蛋把裝電池的手機扔在一個籃子里,你定時去看那個籃子里面有沒有手機,有就拿起來裝屏幕,沒有就再先回去,過一會再來看;
  B、你更全蛋約定,你們兩個之間裝一個設備,全蛋那里有一個按鈕,按一下你這邊的那個燈就閃一下,然后你就知道有手機準備好裝屏幕了。此外,全蛋哪里還順手裝多了一個按鈕,按一下你這邊紅燈就會亮,你就知道出問題了(比如說有一臺Note7混進來了),你就去處理一下這個問題。

你看完這兩個方案以后,男默女淚,老子可是程序員出身啊,一看就知道方案B是異步,肯定是方案B好啊!
  于是工廠用了方案B,你欣慰地笑了,然后繼續回去裝手機屏幕。直到有一天,你發現原來整個生產流程不只是 裝電池-裝屏幕這么簡單,還有裝天線、裝攝像頭等等一系列的流程,于是你略一沉思,用代碼模擬了大概的流程:

void 生產手機(){
    手機 phone = 手機模版.build("iphone");

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

寫完以后,你哭了(好吧我也哭了)。這巨tm丑哇大哥!這樣的代碼你還有維護的欲望?然后你發現,原來廠里面已經是信號燈閃來閃去了,要修改生產流程,要順著燈的指引找下去,找到之后還要balabala地引導員工....(各位兄弟可以嘗試修改一下上面的代碼,需求很簡單,我要“裝電池”和“裝天線”兩個步驟對換一下,里面的回調函數也是需要調換的喔)

在你哭泣的時候,你忽然想到了一個東西——流水線!!!!于是你給出了一個方案:
  1、廠內引進流水線,讓生產員工坐在流水線旁邊;
  2、工人完成自己的工序以后,就把手機放到流水線上面,讓下一個兄弟繼續加工;
  3、在流水線上的員工,沒有事做的時候可以睡大覺,這條智能的流水線會在手機流到你的崗位的時候對你響喇叭,把你喚醒起來工作;
  4、如果在工人加工的過程中,發現了問題(比如混入了Note7),那個員工就在手機上面貼上一個紅色的貼紙,讓后面有能力處理的員工來處理這個問題。

實際上員工會盯著流水線,但是在我們的編程中,不可能這樣,因為上一步操作的耗時是不可預知的,不停輪詢實在是太蠢了。在實際的代碼實現中,還是采用了異步的思想。放回這個例子中,就是沒事做的時候你可以睡大覺,當上一件產品流到你這里的時候,“智能流水線”就會在你這個位置響喇叭,把你喚醒起來工作,甚至,當你手頭上的工作還沒完成的時候,流水線會停下來(阻塞))

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

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

(老板很滿意,于是給你晚飯加了雞腿)
  哇,簡直是藝術品啊,大氣簡潔有木有。要維護這樣的代碼,別說了,老板再來十段!
  好了,現在我就跟你港,流水線生產就是函數響應式編程!再讀一下響應式編程的定義,”響應式編程是一種面向數據流和變化傳播的編程范式。“,小兄弟,現在懂了沒有哇。
  最后再多說一嘴吧,沒有流水線,工廠照樣生產,而且效率還不會很低;但是有了流水線,工廠的生產就顯得非常規范通順,這就是”范式"的魅力。


總結

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

一、判斷題
  1、響應式編程不是異步操作;
  1.5、響應式是阻塞的;
  2、只有特定的對象才能產生數據流;
  3、范式只是一種指導,所以不使用范式并不會影響代碼的運行(僅指運行效果,不涉及效率等其他指標);

二、簡答題
  1、有如下幾個關于響應式編程的定義,請逐個解釋并找出不正確的定義(可能有若干個):
    A、響應式編程是一種面向數據流和變化傳播的編程范式。
    B、響應式編程就是異步數據流交互的編程范式。
    C、響應式編程就是 異步操作同步化。
    D、響應式編程就是流水線

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

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

4、自問自答(不必書面回答),你真的了解響應式編程了嗎,你能不能給一個剛接觸編程的人解釋一下?


未經授權,不得轉載。
  原文地址:http://www.lxweimin.com/p/111e0a4b9b17

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,443評論 6 532
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,530評論 3 416
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,407評論 0 375
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 62,981評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,759評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,204評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,263評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,415評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,955評論 1 336
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,782評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,983評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,528評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,222評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,650評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,892評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,675評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,967評論 2 374

推薦閱讀更多精彩內容