《Java設計模式及實踐》之響應式編程與設計模式

屬性 信息
文檔名稱 響應式編程與設計模式
版本號 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
發佈了354 篇原創文章 · 獲贊 228 · 訪問量 73萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章