本書向讀者展示Java語言中更加智能化的編碼實例。書中首先介紹面向對象編程(OOP)和函數(shù)式編程(FP)范式,然后描述常用設計模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設計模式。讀者將學習混合使用OOP和FP的實現(xiàn)方式,然后學習響應式編程模型一種為了編寫更好的代碼而將OOP和FP結合使用的方法。之后,本書將介紹從MVC架構向微服務和無服務器架構轉變的發(fā)展趨勢,*后介紹Java新版本的功能特性及其實踐。通過本書的學習,讀者可以有效地解決開發(fā)應用程序過程中的常見問題,能夠輕松地應對各種規(guī)模項目的擴展和維護。
對于開發(fā)人員來說,掌握設計模式有助于提高代碼質量,促進代碼重用,增強架構健壯性。隨著編程語言的不斷發(fā)展,新特性層出不窮,在其被廣泛使用前,程序員往往需要花費大量時間去理解和掌握。本書的目的就是降低新技術趨勢的接受難度,為程序員提供良好的應用實踐。
本書向你展示Java語言中更加智能化的編碼實例。書中首先介紹面向對象編程(OOP)和函數(shù)式編程(FP)范式,然后描述常用設計模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設計模式。
你將學習混合使用OOP和FP的實現(xiàn)方式,然后學習響應式編程模型一種為了編寫更好的代碼而將OOP和FP結合使用的方法。之后,本書將介紹從MVC架構向微服務和無服務器架構轉變的發(fā)展趨勢,*后介紹Java新版本的功能特性及其實踐。
通過本書的學習,你可以有效地解決開發(fā)應用程序過程中的常見問題,能夠輕松地應對各種規(guī)模項目的擴展和維護。具體包括:
● 理解面向對象編程和函數(shù)式編程范式
● 探究傳統(tǒng)Java設計模式的使用方式
● 了解Java的新功能特性及其對經(jīng)典設計模式的影響
● 了解響應式編程及其作為增強版的函數(shù)式編程的原因
● 應用響應式編程模式并探尋其解決常見問題的好方法
● 了解架構的發(fā)展趨勢和從MVC架構到無服務器應用架構的轉變
● 應用Java的新功能特性及其實踐
借助設計模式,開發(fā)者可以改進代碼庫,提高代碼可重用性,并使技術架構更加健壯。隨著編程語言的不斷發(fā)展,新的語言特性在得到廣泛應用之前往往需要大量時間去理解。本書旨在降低接受最新趨勢的難度,為開發(fā)人員提供良好的實例。
本書的目標讀者
本書適用于每一位有意愿編寫高質量代碼的Java開發(fā)人員。本書講述了很多開發(fā)者在編碼時經(jīng)常疏忽的最佳實踐。書中涵蓋了許多設計模式,這些設計模式經(jīng)開發(fā)團隊實踐和測試過,是用來解決特定問題的最佳方案。
本書內容
第1章介紹了Java語言不同的編程范式。
第2章介紹了多種設計模式中的創(chuàng)建型模式,講述了多種類型的創(chuàng)建型設計模式。
第3章介紹了行為型設計模式,主要解析了多種用來管理代碼和對象行為的設計模式。
第4章介紹了結構型設計模式,詳細解析了用于管理對象結構的設計模式。
第5章向讀者介紹了函數(shù)式編程及與之相關的設計模式。
第6章通過實例介紹了響應式編程及其Java實現(xiàn)。
第7章進一步探索了響應式編程的核心內容及與之相關的設計模式。
第8章從MVC架構到微服務和無服務器應用,探索了近年來開發(fā)者嘗試和測試過的多種架構模式。
第9章介紹了Java的歷史、最佳實踐和最新版Java中的更新,并在最后表達了作者對Java未來的期待。
如何充分利用本書
擁有Java開發(fā)經(jīng)驗者將能從本書中獲益良多,推薦讀者在閱讀過程中探索并充分實踐各章中提供的示例代碼。
下載示例代碼及彩色圖像
本書的示例代碼及所有截圖和圖表,可以從http://www.packtpub.com通過個人賬號下載,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個人賬號下載。
卡馬爾米特·辛格(Kamalmeet Singh),在15歲時首次嘗試了編程并立刻愛上了它。他在獲得信息技術學士學位之后加入了一家創(chuàng)業(yè)公司,在那里進一步提升了對Java編程的熱愛之情。IT行業(yè)13年的工作經(jīng)驗,以及在不同的公司、國家和領域的沉淀,使他成長為一名開發(fā)人員和技術架構師。他使用的技術包括云計算、機器學習、增強現(xiàn)實、無服務器應用程序、微服務等,但他的愛仍然是Java。
艾德里安·伊恩庫列斯庫(Adrian Ianculescu),一名擁有20年編程經(jīng)驗的軟件開發(fā)人員,其中12年使用Java。他在2-40人的團隊中工作,他意識到開發(fā)軟件不僅僅是編寫代碼,而對以不同的方法和框架設計軟件和架構產(chǎn)生了興趣。在公司工作一段時間之后,他開始轉變?yōu)樽杂陕殬I(yè)者和企業(yè)家,以追隨他童年時代的夢想制作游戲。
路西安-保羅·托爾耶(Lucian-Paul Torje),一位有抱負的軟件工匠,在軟件行業(yè)工作了近15年,幾乎對所有與技術有關的事情都感興趣,這就是他涉獵廣泛的原因,包括從MS-DOSTSR到微服務,從Atmel微控制器到Android、iOS和Chromebook,從C/C 到Java,從Oracle到MongoDB。
譯者簡介:
張小坤,軟件開發(fā)工程師、項目經(jīng)理、系統(tǒng)架構師,畢業(yè)于北京理工大學軟件學院,長期從事系統(tǒng)設計開發(fā)工作,經(jīng)驗豐富,對設計模式有深刻的認識和理解。
黃凱,系統(tǒng)架構師,畢業(yè)于北京理工大學軟件學院,一直從事軟件研發(fā)工作,對設計模式與實際開發(fā)中的應用具有較為豐富的經(jīng)驗。
賀濤,高級軟件工程師、項目經(jīng)理,長期致力于系統(tǒng)設計和應用研發(fā)工作,實踐經(jīng)驗豐富。
譯者序
前言
關于作者
關于評審者
第1章 從面向對象到函數(shù)式編程 1
1.1 Java簡介 1
1.2 Java編程范式 2
1.2.1 命令式編程 2
1.2.2 面向對象編程 3
1.2.3 聲明式編程 6
1.2.4 函數(shù)式編程 6
1.3 流以及集合的使用 7
1.4 統(tǒng)一建模語言簡介 8
1.5 設計模式和原則 11
1.5.1 單一職責原則 12
1.5.2 開閉原則 13
1.5.3 里氏替換原則 13
1.5.4 接口隔離原則 14
1.5.5 依賴倒置原則 16
1.6 總結 16
第2章 創(chuàng)建型模式 18
2.1 單例模式 18
2.1.1 同步鎖單例模式 19
2.1.2 擁有雙重校驗鎖機制的同步鎖單例模式 20
2.1.3 無鎖的線程安全單例模式 21
2.1.4 提前加載和延遲加載 21
2.2 工廠模式 22
2.2.1 簡單工廠模式 22
2.2.2 工廠方法模式 25
2.2.3 抽象工廠模式 27
2.2.4 簡單工廠、工廠方法與抽象工廠模式之間的對比 28
2.3 建造者模式 29
2.3.1 汽車建造者樣例 30
2.3.2 簡化的建造者模式 32
2.3.3 擁有方法鏈的匿名建造者 32
2.4 原型模式 33
2.5 對象池模式 34
2.6 總結 36
第3章 行為型模式 37
3.1 責任鏈模式 38
3.2 命令模式 40
3.3 解釋器模式 43
3.4 迭代器模式 47
3.5 觀察者模式 50
3.6 中介者模式 51
3.7 備忘錄模式 53
3.8 狀態(tài)模式 55
3.9 策略模式 55
3.10 模板方法模式 56
3.11 空對象模式 57
3.12 訪問者模式 58
3.13 總結 59
第4章 結構型模式 60
4.1 適配器模式 61
4.2 代理模式 66
4.3 裝飾器模式 70
4.4 橋接模式 73
4.5 組合模式 76
4.6 外觀模式 79
4.7 享元模式 83
4.8 總結 88
第5章 函數(shù)式編程 89
5.1 函數(shù)式編程簡介 89
5.1.1 lambda表達式 91
5.1.2 純函數(shù) 92
5.1.3 引用透明性 92
5.1.4 初等函數(shù) 93
5.1.5 高階函數(shù) 93
5.1.6 組合 93
5.1.7 柯里化 93
5.1.8 閉包 94
5.1.9 不可變性 95
5.1.10 函子 95
5.1.11 單子 96
5.2 Java中的函數(shù)式編程 97
5.2.1 lambda表達式 97
5.2.2 流 98
5.3 重新實現(xiàn)面向對象編程設計模式 102
5.3.1 單例模式 102
5.3.2 建造者模式 102
5.3.3 適配器模式 103
5.3.4 裝飾器模式 103
5.3.5 責任鏈模式 103
5.3.6 命令模式 104
5.3.7 解釋器模式 104
5.3.8 迭代器模式 104
5.3.9 觀察者模式 105
5.3.10 策略模式 105
5.3.11 模板方法模式 105
5.4 函數(shù)式設計模式 106
5.4.1 MapReduce 106
5.4.2 借貸模式 107
5.4.3 尾調用優(yōu)化 108
5.4.4 記憶化 109
5.4.5 執(zhí)行around方法 110
5.5 總結 111
第6章 響應式編程 112
6.1 什么是響應式編程 113
6.2 RxJava簡介 114
6.3 安裝RxJava 115
6.3.1 Maven下的安裝 115
6.3.2 JShell下的安裝 116
6.4 Observable、Flowable、Observer和Subscription的含義 116
6.5 創(chuàng)建Observable 118
6.5.1 create操作符 118
6.5.2 defer操作符 119
6.5.3 empty操作符 120
6.5.4 from操作符 120
6.5.5 interval操作符 120
6.5.6 timer操作符 121
6.5.7 range操作符 121
6.5.8 repeat操作符 121
6.6 轉換Observable 122
6.6.1 subscribe操作符 122
6.6.2 buffer操作符 122
6.6.3 flatMap操作符 122
6.6.4 groupBy操作符 124
6.6.5 map操作符 124
6.6.6 scan操作符 125
6.6.7 window操作符 125
6.7 過濾Observable 125
6.7.1 debounce操作符 125
6.7.2 distinct操作符 126
6.7.3 elementAt操作符 126
6.7.4 f?ilter操作符 127
6.7.5 f?irst/last操作符 127
6.7.6 sample操作符 128
6.7.7 skip操作符 128
6.7.8 take操作符 128
6.8 組合Observable 128
6.8.1 combine操作符 129
6.8.2 join操作符 129
6.8.3 merge操作符 130
6.8.4 zip操作符 131
6.9 異常處理 131
6.9.1 catch操作符 131
6.9.2 do操作符 132
6.9.3 using操作符 133
6.9.4 retry操作符 133
6.10 線程調度器 134
6.11 Subject 135
6.12 示例項目 136
6.13 總結 139
第7章 響應式設計模式 140
7.1 響應模式 140
7.1.1 請求-響應模式 140
7.1.2 異步通信模式 146
7.1.3 緩存模式 148
7.1.4 扇出與最快響應模式 149
7.1.5 快速失敗模式 150
7.2 彈性模式 150
7.2.1 斷路器模式 150
7.2.2 故障處理模式 151
7.2.3 有限隊列模式 151
7.2.4 監(jiān)控模式 152
7.2.5 艙壁模式 152
7.3 柔性模式 152
7.3.1 單一職責模式 153
7.3.2 無狀態(tài)服務模式 154
7.3.3 自動伸縮模式 156
7.3.4 自包含模式 156
7.4 消息驅動通信模式 157
7.4.1 事件驅動通信模式 157
7.4.2 出版者-訂閱者模式 157
7.4.3 冪等性模式 158
7.5 總結 158
第8章 應用架構的發(fā)展趨勢 159
8.1 什么是應用架構 159
8.2 分層架構 160
8.2.1 分層架構示例 162
8.2.2 tier和layer的區(qū)別 1