屬性 | 信息 |
---|---|
文檔名稱 | 響應式編程與設計模式 |
版本號 | V0.0.0.0 |
文檔修改日誌
修改時間 | 修改人 | 修改描述 | 版本號 |
---|---|---|---|
2019-12-28 09:59 | 宋全恆 | 響應式編程與設計模式 | V0.0.0.0 |
1 簡介
在《Java8設計模式與實踐》中第六章和第七章,辛格主要闡述了關於響應式編程與響應式設計模式相關的內容,Reatcive Programming是一種面向數據流和變化傳播的編程範式。這意味着可以在編程語言中很方便的表達靜態或動態的數據流,二相關的計算模型回自動將變化的值通過數據流進行傳播。
1.1 實例理解
1.1.1 命令式編程
在命令式編程環境中,
a = b + c;
會將表達式的結果賦給a,而之後改變b或c的值不會影響a。但在響應式編程中,a的值會隨着b或c的更新而更新。
1.1.2 電子表格
定義流的過程類似於聲明Excel的
C1單元格的值等於B1單元格的內容加上A1單元格的內容
這樣的效果是,無論何時更新A1或者B1單元格的內容,都能觀察到C1單元格的更新。
1.2 5W1H
在工作和生活中對於一個陌生的事物,我們可以通過如下的六個側面來逐漸的熟悉。
- What - 我真正要解決的問題是什麼?
- Why - 我爲什麼需要解決這個問題?
- When - 這個問題何時發生?我需要在什麼時間內解決?
- Where - 這個問題可以從哪裏入手?什麼場景下使用?哪裏可以找到答案?
- Who - 我可以求助誰?這個問題對誰影響最大?
- How - 有什麼切實可行的解決方案嗎?如何解決最高效?
2 響應式編程
2.1 定義
根據響應式宣言,響應式系統具有如下的屬性
響應式編程是一種依賴於異步數據流的編程範式,它是異步方式下的一種事件驅動型子集,相比之下,響應式系統則是消息驅動的,這表示已經預先知道接收方,而對於事件驅動型來說,接收方可以是任何的觀察者。響應式編程不再僅僅是基於事件的編程方式,它更強調數據流而非控制流。
響應式編程中應用了一些來自函數式編程範疇的抽象概念
2.2 爲什麼要使用響應式編程
2.3 實踐
在Java的世界,響應式編程框架的Java實現版本爲RxJava。
2.4 Observerable與Observer含義
2.4.1 概念
響應式模式與觀察者模式有許多的相似之處,其中觀察者模式的類圖如下:
下圖爲Observable的流程
Observer(觀察者)訂閱一個Observable,當Observable發送數據時,Observer會通過消費或轉換數據來做出響應。在等待Observable發送數據時不需要進行阻塞,,這種模式有助於併發操作。
2.4.2 Observable與迭代器的區別
響應式編程中的Observable類似於指令迭代器,它解決了相同的問題,但策略不同。Observable通過異步方式推送數據,而迭代器採用同步方式拉取數據。處理錯誤的方式也不同:Observable使用錯誤回調函數,而迭代器使用拋出異常。
事件 | Iterable | Observable |
---|---|---|
獲取數據 | T next() | onNext(T) |
異常 | thrown new Exception | onError(Exception) |
完成後觸發 | Return | onCompleted() |
通過使用訂閱方法(onNextAction、onErrorAction、onCompletedAction)將Observer與Observable關聯起來。
從設計的角度看,響應式編程的Observable通過使用onError回調方法和onCompleted回調方法添加了在發送完成和發送異常時能夠發送通知的功能,使觀察者模式得到了增強。
2.5 操作符
3 響應式設計模式
請求-響應模式時最簡單的設計模式
請求-響應關係有兩方,一個實體發出請求,一個實體完成請求。雙方需要就請求和響應的格式達成一致,可以是XML、HTML、JSON、String,只要兩個實體都能理解通信,任何格式都是有效的。
響應式編程的四大關鍵
3.1 響應模式
雖然請求-響應模式確保所有請求都獲得成功響應,但它不會處理某些請求能需要大量時間來響應的情況。即使我們正在執行批量任務,異步通信模式也可以幫助應用程序保持響應。實現響應或快速的方式是使核心任務執行異步。
緩存可以在不同級別實現,例如控制器級別,服務層級別,數據層級別。我們還可以在清代到達代碼之前實現緩存,也就是說,在服務器或負載均衡器級別。
3.2 彈性模式
彈性模式的主要含義是:應用程序可以處理故障情況嗎?組件故障是否會影響其他應用程序
其中斷路器的含義可以通過下述例子中理解:
我們需要一種服務X的機制來理解Y當前是不健康的,並能夠正確的處理這種情況。處理這種情況的一種方法是服務X調用服務Y時,如果它在N次重試後觀察到服務Y沒有響應,則認爲服務不健康,並且將其報告報告給監控系統,同時,一段固定的時間(例如10分鐘)內它停止調用服務Y
3.3 柔性模式
對可變負載條件作出反應,當負載增加或減少,應用程序不應受到影響,並且應該能夠處理任何負載級別而不會影響性能。
柔性一個還未提及的方面是應用程序不應使用不必要的資源
如果我們認爲每個請求都是獨立的,即在提供所要求的信息、由誰、用戶的當前狀態方面自給自足,就可以不再擔心維護用戶的狀態了
3.4 消息驅動通信模式
4 總結
剛簡單的翻了一下讀這兩章的時間,發現自己都是在浙江圖書館完成的。並且在P131還摘抄了一首小詩:
窮達皆由命,何勞發嘆聲;
但知行好事,莫要問前程。
冬去冰須泮,春來草自生。
請君觀此理,天道甚分明。
只要認識到自己的自己的憤怒是小題大做,我們就能更加理性地控制自己的情緒。
少年經不得順境,當我們無所事事的時候,內心的雜念便會悄然滋長。
作家馬爾克斯有一句名言:“生命中真正重要的不是你遭遇了什麼,二十你記住了那些事,又是如何銘記的。”時常感到幸福的人,往往不是因爲他一直被善待,而是他只記得自己被善待。
最近一直在使用雙十二買的平板,然後買了一個機械鍵盤綻放,是送給妹子的,但妹子不肯接受,又懶得退,就直接用了。最近把onenote的筆記一股腦全部遷移到了印象筆記。晚上下班回家以後,會用鍵盤連接,學習一會兒,妹子今天出差。
中午在曾經一起吃過飯的飯館裏吃了些荷包飯,還不錯。然後把《中國機長》看完了,整個劇情還是很緊湊的,張涵予飾演的劉長建沉穩幹練,電影是根據18年5月14日四川航空3U8633號機組成功處置特情真實事件改編:機組執行航班任務時,在萬米高空突遇駕駛擋風玻璃爆裂脫落、座艙釋壓的極端罕見險情,生死關頭,機長和機組人員冷靜沉着,穩住生死邊緣的乘客,果斷應付正確的處置,安全的把119名乘客帶回成都的故事。畢竟帶着中國的電影名稱,在劇中也顯示了我國強大的應急預案和風險處置能力,尤其影片中飛機平安降落之後,消防、醫務、警務人員緊張去救人的場面讓人感動。機長的那一句“敬畏生命、敬畏職責、敬畏規章”的非常感動。
最後把腦圖的完整版圖片附在下面:
2019-12-28 16:51 於馬塍路36號