本書向讀者展示Java語言中更加智能化的編碼實(shí)例。書中首先介紹面向?qū)ο缶幊蹋∣OP)和函數(shù)式編程(FP)范式,然后描述常用設(shè)計模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設(shè)計模式。讀者將學(xué)習(xí)混合使用OOP和FP的實(shí)現(xiàn)方式,然后學(xué)習(xí)響應(yīng)式編程模型一種為了編寫更好的代碼而將OOP和FP結(jié)合使用的方法。之后,本書將介紹從MVC架構(gòu)向微服務(wù)和無服務(wù)器架構(gòu)轉(zhuǎn)變的發(fā)展趨勢,*后介紹Java新版本的功能特性及其實(shí)踐。通過本書的學(xué)習(xí),讀者可以有效地解決開發(fā)應(yīng)用程序過程中的常見問題,能夠輕松地應(yīng)對各種規(guī)模項(xiàng)目的擴(kuò)展和維護(hù)。
對于開發(fā)人員來說,掌握設(shè)計模式有助于提高代碼質(zhì)量,促進(jìn)代碼重用,增強(qiáng)架構(gòu)健壯性。隨著編程語言的不斷發(fā)展,新特性層出不窮,在其被廣泛使用前,程序員往往需要花費(fèi)大量時間去理解和掌握。本書的目的就是降低新技術(shù)趨勢的接受難度,為程序員提供良好的應(yīng)用實(shí)踐。
本書向你展示Java語言中更加智能化的編碼實(shí)例。書中首先介紹面向?qū)ο缶幊蹋∣OP)和函數(shù)式編程(FP)范式,然后描述常用設(shè)計模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設(shè)計模式。
你將學(xué)習(xí)混合使用OOP和FP的實(shí)現(xiàn)方式,然后學(xué)習(xí)響應(yīng)式編程模型一種為了編寫更好的代碼而將OOP和FP結(jié)合使用的方法。之后,本書將介紹從MVC架構(gòu)向微服務(wù)和無服務(wù)器架構(gòu)轉(zhuǎn)變的發(fā)展趨勢,*后介紹Java新版本的功能特性及其實(shí)踐。
通過本書的學(xué)習(xí),你可以有效地解決開發(fā)應(yīng)用程序過程中的常見問題,能夠輕松地應(yīng)對各種規(guī)模項(xiàng)目的擴(kuò)展和維護(hù)。具體包括:
● 理解面向?qū)ο缶幊毯秃瘮?shù)式編程范式
● 探究傳統(tǒng)Java設(shè)計模式的使用方式
● 了解Java的新功能特性及其對經(jīng)典設(shè)計模式的影響
● 了解響應(yīng)式編程及其作為增強(qiáng)版的函數(shù)式編程的原因
● 應(yīng)用響應(yīng)式編程模式并探尋其解決常見問題的好方法
● 了解架構(gòu)的發(fā)展趨勢和從MVC架構(gòu)到無服務(wù)器應(yīng)用架構(gòu)的轉(zhuǎn)變
● 應(yīng)用Java的新功能特性及其實(shí)踐
借助設(shè)計模式,開發(fā)者可以改進(jìn)代碼庫,提高代碼可重用性,并使技術(shù)架構(gòu)更加健壯。隨著編程語言的不斷發(fā)展,新的語言特性在得到廣泛應(yīng)用之前往往需要大量時間去理解。本書旨在降低接受最新趨勢的難度,為開發(fā)人員提供良好的實(shí)例。
本書的目標(biāo)讀者
本書適用于每一位有意愿編寫高質(zhì)量代碼的Java開發(fā)人員。本書講述了很多開發(fā)者在編碼時經(jīng)常疏忽的最佳實(shí)踐。書中涵蓋了許多設(shè)計模式,這些設(shè)計模式經(jīng)開發(fā)團(tuán)隊實(shí)踐和測試過,是用來解決特定問題的最佳方案。
本書內(nèi)容
第1章介紹了Java語言不同的編程范式。
第2章介紹了多種設(shè)計模式中的創(chuàng)建型模式,講述了多種類型的創(chuàng)建型設(shè)計模式。
第3章介紹了行為型設(shè)計模式,主要解析了多種用來管理代碼和對象行為的設(shè)計模式。
第4章介紹了結(jié)構(gòu)型設(shè)計模式,詳細(xì)解析了用于管理對象結(jié)構(gòu)的設(shè)計模式。
第5章向讀者介紹了函數(shù)式編程及與之相關(guān)的設(shè)計模式。
第6章通過實(shí)例介紹了響應(yīng)式編程及其Java實(shí)現(xiàn)。
第7章進(jìn)一步探索了響應(yīng)式編程的核心內(nèi)容及與之相關(guān)的設(shè)計模式。
第8章從MVC架構(gòu)到微服務(wù)和無服務(wù)器應(yīng)用,探索了近年來開發(fā)者嘗試和測試過的多種架構(gòu)模式。
第9章介紹了Java的歷史、最佳實(shí)踐和最新版Java中的更新,并在最后表達(dá)了作者對Java未來的期待。
如何充分利用本書
擁有Java開發(fā)經(jīng)驗(yàn)者將能從本書中獲益良多,推薦讀者在閱讀過程中探索并充分實(shí)踐各章中提供的示例代碼。
下載示例代碼及彩色圖像
本書的示例代碼及所有截圖和圖表,可以從http://www.packtpub.com通過個人賬號下載,也可以訪問華章圖書官網(wǎng)http://www.hzbook.com,通過注冊并登錄個人賬號下載。
卡馬爾米特·辛格(Kamalmeet Singh),在15歲時首次嘗試了編程并立刻愛上了它。他在獲得信息技術(shù)學(xué)士學(xué)位之后加入了一家創(chuàng)業(yè)公司,在那里進(jìn)一步提升了對Java編程的熱愛之情。IT行業(yè)13年的工作經(jīng)驗(yàn),以及在不同的公司、國家和領(lǐng)域的沉淀,使他成長為一名開發(fā)人員和技術(shù)架構(gòu)師。他使用的技術(shù)包括云計算、機(jī)器學(xué)習(xí)、增強(qiáng)現(xiàn)實(shí)、無服務(wù)器應(yīng)用程序、微服務(wù)等,但他的愛仍然是Java。
艾德里安·伊恩庫列斯庫(Adrian Ianculescu),一名擁有20年編程經(jīng)驗(yàn)的軟件開發(fā)人員,其中12年使用Java。他在2-40人的團(tuán)隊中工作,他意識到開發(fā)軟件不僅僅是編寫代碼,而對以不同的方法和框架設(shè)計軟件和架構(gòu)產(chǎn)生了興趣。在公司工作一段時間之后,他開始轉(zhuǎn)變?yōu)樽杂陕殬I(yè)者和企業(yè)家,以追隨他童年時代的夢想制作游戲。
路西安-保羅·托爾耶(Lucian-Paul Torje),一位有抱負(fù)的軟件工匠,在軟件行業(yè)工作了近15年,幾乎對所有與技術(shù)有關(guān)的事情都感興趣,這就是他涉獵廣泛的原因,包括從MS-DOSTSR到微服務(wù),從Atmel微控制器到Android、iOS和Chromebook,從C/C 到Java,從Oracle到MongoDB。
譯者簡介:
張小坤,軟件開發(fā)工程師、項(xiàng)目經(jīng)理、系統(tǒng)架構(gòu)師,畢業(yè)于北京理工大學(xué)軟件學(xué)院,長期從事系統(tǒng)設(shè)計開發(fā)工作,經(jīng)驗(yàn)豐富,對設(shè)計模式有深刻的認(rèn)識和理解。
黃凱,系統(tǒng)架構(gòu)師,畢業(yè)于北京理工大學(xué)軟件學(xué)院,一直從事軟件研發(fā)工作,對設(shè)計模式與實(shí)際開發(fā)中的應(yīng)用具有較為豐富的經(jīng)驗(yàn)。
賀濤,高級軟件工程師、項(xiàng)目經(jīng)理,長期致力于系統(tǒng)設(shè)計和應(yīng)用研發(fā)工作,實(shí)踐經(jīng)驗(yàn)豐富。
譯者序
前言
關(guān)于作者
關(guān)于評審者
第1章 從面向?qū)ο蟮胶瘮?shù)式編程 1
1.1 Java簡介 1
1.2 Java編程范式 2
1.2.1 命令式編程 2
1.2.2 面向?qū)ο缶幊? 3
1.2.3 聲明式編程 6
1.2.4 函數(shù)式編程 6
1.3 流以及集合的使用 7
1.4 統(tǒng)一建模語言簡介 8
1.5 設(shè)計模式和原則 11
1.5.1 單一職責(zé)原則 12
1.5.2 開閉原則 13
1.5.3 里氏替換原則 13
1.5.4 接口隔離原則 14
1.5.5 依賴倒置原則 16
1.6 總結(jié) 16
第2章 創(chuàng)建型模式 18
2.1 單例模式 18
2.1.1 同步鎖單例模式 19
2.1.2 擁有雙重校驗(yàn)鎖機(jī)制的同步鎖單例模式 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 總結(jié) 36
第3章 行為型模式 37
3.1 責(zé)任鏈模式 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 總結(jié) 59
第4章 結(jié)構(gòu)型模式 60
4.1 適配器模式 61
4.2 代理模式 66
4.3 裝飾器模式 70
4.4 橋接模式 73
4.5 組合模式 76
4.6 外觀模式 79
4.7 享元模式 83
4.8 總結(jié) 88
第5章 函數(shù)式編程 89
5.1 函數(shù)式編程簡介 89
5.1.1 lambda表達(dá)式 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表達(dá)式 97
5.2.2 流 98
5.3 重新實(shí)現(xiàn)面向?qū)ο缶幊淘O(shè)計模式 102
5.3.1 單例模式 102
5.3.2 建造者模式 102
5.3.3 適配器模式 103
5.3.4 裝飾器模式 103
5.3.5 責(zé)任鏈模式 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ù)式設(shè)計模式 106
5.4.1 MapReduce 106
5.4.2 借貸模式 107
5.4.3 尾調(diào)用優(yōu)化 108
5.4.4 記憶化 109
5.4.5 執(zhí)行around方法 110
5.5 總結(jié) 111
第6章 響應(yīng)式編程 112
6.1 什么是響應(yīng)式編程 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 轉(zhuǎn)換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 線程調(diào)度器 134
6.11 Subject 135
6.12 示例項(xiàng)目 136
6.13 總結(jié) 139
第7章 響應(yīng)式設(shè)計模式 140
7.1 響應(yīng)模式 140
7.1.1 請求-響應(yīng)模式 140
7.1.2 異步通信模式 146
7.1.3 緩存模式 148
7.1.4 扇出與最快響應(yīng)模式 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 單一職責(zé)模式 153
7.3.2 無狀態(tài)服務(wù)模式 154
7.3.3 自動伸縮模式 156
7.3.4 自包含模式 156
7.4 消息驅(qū)動通信模式 157
7.4.1 事件驅(qū)動通信模式 157
7.4.2 出版者-訂閱者模式 157
7.4.3 冪等性模式 158
7.5 總結(jié) 158
第8章 應(yīng)用架構(gòu)的發(fā)展趨勢 159
8.1 什么是應(yīng)用架構(gòu) 159
8.2 分層架構(gòu) 160
8.2.1 分層架構(gòu)示例 162
8.2.2 tier和layer的區(qū)別 1