天天看點

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

屬性 資訊
文檔名稱 響應式程式設計與設計模式
版本号 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。但在響應式程式設計中,a的值會随着b或c的更新而更新。

1.1.2 電子表格

定義流的過程類似于聲明Excel的

C1單元格的值等于B1單元格的内容加上A1單元格的内容
           

這樣的效果是,無論何時更新A1或者B1單元格的内容,都能觀察到C1單元格的更新。

1.2 5W1H

在工作和生活中對于一個陌生的事物,我們可以通過如下的六個側面來逐漸的熟悉。

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結
  • What - 我真正要解決的問題是什麼?
  • Why - 我為什麼需要解決這個問題?
  • When - 這個問題何時發生?我需要在什麼時間内解決?
  • Where - 這個問題可以從哪裡入手?什麼場景下使用?哪裡可以找到答案?
  • Who - 我可以求助誰?這個問題對誰影響最大?
  • How - 有什麼切實可行的解決方案嗎?如何解決最高效?

2 響應式程式設計

2.1 定義

根據響應式宣言,響應式系統具有如下的屬性

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

響應式程式設計是一種依賴于異步資料流的程式設計範式,它是異步方式下的一種事件驅動型子集,相比之下,響應式系統則是消息驅動的,這表示已經預先知道接收方,而對于事件驅動型來說,接收方可以是任何的觀察者。響應式程式設計不再僅僅是基于事件的程式設計方式,它更強調資料流而非控制流。

響應式程式設計中應用了一些來自函數式程式設計範疇的抽象概念

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

2.2 為什麼要使用響應式程式設計

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

2.3 實踐

在Java的世界,響應式程式設計架構的Java實作版本為RxJava。

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

2.4 Observerable與Observer含義

2.4.1 概念

響應式模式與觀察者模式有許多的相似之處,其中觀察者模式的類圖如下:

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

下圖為Observable的流程

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

Observer(觀察者)訂閱一個Observable,當Observable發送資料時,Observer會通過消費或轉換資料來做出響應。在等待Observable發送資料時不需要進行阻塞,,這種模式有助于并發操作。

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

2.4.2 Observable與疊代器的差別

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

響應式程式設計中的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 操作符

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

3 響應式設計模式

請求-響應模式時最簡單的設計模式

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

請求-響應關系有兩方,一個實體送出請求,一個實體完成請求。雙方需要就請求和響應的格式達成一緻,可以是XML、HTML、JSON、String,隻要兩個實體都能了解通信,任何格式都是有效的。

響應式程式設計的四大關鍵

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

3.1 響應模式

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

雖然請求-響應模式確定所有請求都獲得成功響應,但它不會處理某些請求能需要大量時間來響應的情況。即使我們正在執行批量任務,異步通信模式也可以幫助應用程式保持響應。實作響應或快速的方式是使核心任務執行異步。

緩存可以在不同級别實作,例如控制器級别,服務層級别,資料層級别。我們還可以在清代到達代碼之前實作緩存,也就是說,在伺服器或負載均衡器級别。

3.2 彈性模式

彈性模式的主要含義是:應用程式可以處理故障情況嗎?元件故障是否會影響其他應用程式
《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

其中斷路器的含義可以通過下述例子中了解:

我們需要一種服務X的機制來了解Y目前是不健康的,并能夠正确的處理這種情況。處理這種情況的一種方法是服務X調用服務Y時,如果它在N次重試後觀察到服務Y沒有響應,則認為服務不健康,并且将其報告報告給監控系統,同時,一段固定的時間(例如10分鐘)内它停止調用服務Y

3.3 柔性模式

對可變負載條件作出反應,當負載增加或減少,應用程式不應受到影響,并且應該能夠處理任何負載級别而不會影響性能。
柔性一個還未提及的方面是應用程式不應使用不必要的資源
《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

如果我們認為每個請求都是獨立的,即在提供所要求的資訊、由誰、使用者的目前狀态方面自給自足,就可以不再擔心維護使用者的狀态了

3.4 消息驅動通信模式

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結

4 總結

剛簡單的翻了一下讀這兩章的時間,發現自己都是在浙江圖書館完成的。并且在P131還摘抄了一首小詩:

窮達皆由命,何勞發歎聲;

但知行好事,莫要問前程。

冬去冰須泮,春來草自生。

請君觀此理,天道甚分明。

隻要認識到自己的自己的憤怒是小題大做,我們就能更加理性地控制自己的情緒。
少年經不得順境,當我們無所事事的時候,内心的雜念便會悄然滋長。
作家馬爾克斯有一句名言:“生命中真正重要的不是你遭遇了什麼,二十你記住了那些事,又是如何銘記的。”時常感到幸福的人,往往不是因為他一直被善待,而是他隻記得自己被善待。

 最近一直在使用雙十二買的平闆,然後買了一個機械鍵盤綻放,是送給妹子的,但妹子不肯接受,又懶得退,就直接用了。最近把onenote的筆記一股腦全部遷移到了印象筆記。晚上下班回家以後,會用鍵盤連接配接,學習一會兒,妹子今天出差。

 中午在曾經一起吃過飯的飯館裡吃了些荷包飯,還不錯。然後把《中國機長》看完了,整個劇情還是很緊湊的,張涵予飾演的劉長建沉穩幹練,電影是根據18年5月14日四川航空3U8633号機組成功處置特情真實事件改編:機組執行航班任務時,在萬米高空突遇駕駛擋風玻璃爆裂脫落、座艙釋壓的極端罕見險情,生死關頭,機長和機組人員冷靜沉着,穩住生死邊緣的乘客,果斷應付正确的處置,安全的把119名乘客帶回成都的故事。畢竟帶着中國的電影名稱,在劇中也顯示了我國強大的應急預案和風險處置能力,尤其影片中飛機平安降落之後,消防、醫務、警務人員緊張去救人的場面讓人感動。機長的那一句“敬畏生命、敬畏職責、敬畏規章”的非常感動。

最後把腦圖的完整版圖檔附在下面:

《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結
《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結
《Java設計模式及實踐》之響應式程式設計與設計模式文檔修改日志1 簡介2 響應式程式設計2.5 操作符3 響應式設計模式4 總結
2019-12-28 16:51 于馬塍路36号