Java設(shè)計(jì)模式及實(shí)踐
定 價(jià):79 元
叢書名:Java核心技術(shù)系列
- 作者:[印度]卡馬爾米特·辛格(Kamalmeet Singh) 等
- 出版時(shí)間:2019/7/1
- ISBN:9787111629436
- 出 版 社:機(jī)械工業(yè)出版社
- 中圖法分類:TP312JA
- 頁(yè)碼:
- 紙張:膠版紙
- 版次:
- 開本:16開
本書向讀者展示Java語(yǔ)言中更加智能化的編碼實(shí)例。書中首先介紹面向?qū)ο缶幊蹋∣OP)和函數(shù)式編程(FP)范式,然后描述常用設(shè)計(jì)模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設(shè)計(jì)模式。讀者將學(xué)習(xí)混合使用OOP和FP的實(shí)現(xiàn)方式,然后學(xué)習(xí)響應(yīng)式編程模型一種為了編寫更好的代碼而將OOP和FP結(jié)合使用的方法。之后,本書將介紹從MVC架構(gòu)向微服務(wù)和無(wú)服務(wù)器架構(gòu)轉(zhuǎn)變的發(fā)展趨勢(shì),*后介紹Java新版本的功能特性及其實(shí)踐。通過(guò)本書的學(xué)習(xí),讀者可以有效地解決開發(fā)應(yīng)用程序過(guò)程中的常見問(wèn)題,能夠輕松地應(yīng)對(duì)各種規(guī)模項(xiàng)目的擴(kuò)展和維護(hù)。
對(duì)于開發(fā)人員來(lái)說(shuō),掌握設(shè)計(jì)模式有助于提高代碼質(zhì)量,促進(jìn)代碼重用,增強(qiáng)架構(gòu)健壯性。隨著編程語(yǔ)言的不斷發(fā)展,新特性層出不窮,在其被廣泛使用前,程序員往往需要花費(fèi)大量時(shí)間去理解和掌握。本書的目的就是降低新技術(shù)趨勢(shì)的接受難度,為程序員提供良好的應(yīng)用實(shí)踐。
本書向你展示Java語(yǔ)言中更加智能化的編碼實(shí)例。書中首先介紹面向?qū)ο缶幊蹋∣OP)和函數(shù)式編程(FP)范式,然后描述常用設(shè)計(jì)模式的經(jīng)典使用方法,并解釋如何利用函數(shù)式編程特性改變經(jīng)典的設(shè)計(jì)模式。
你將學(xué)習(xí)混合使用OOP和FP的實(shí)現(xiàn)方式,然后學(xué)習(xí)響應(yīng)式編程模型一種為了編寫更好的代碼而將OOP和FP結(jié)合使用的方法。之后,本書將介紹從MVC架構(gòu)向微服務(wù)和無(wú)服務(wù)器架構(gòu)轉(zhuǎn)變的發(fā)展趨勢(shì),*后介紹Java新版本的功能特性及其實(shí)踐。
通過(guò)本書的學(xué)習(xí),你可以有效地解決開發(fā)應(yīng)用程序過(guò)程中的常見問(wèn)題,能夠輕松地應(yīng)對(duì)各種規(guī)模項(xiàng)目的擴(kuò)展和維護(hù)。具體包括:
● 理解面向?qū)ο缶幊毯秃瘮?shù)式編程范式
● 探究傳統(tǒng)Java設(shè)計(jì)模式的使用方式
● 了解Java的新功能特性及其對(duì)經(jīng)典設(shè)計(jì)模式的影響
● 了解響應(yīng)式編程及其作為增強(qiáng)版的函數(shù)式編程的原因
● 應(yīng)用響應(yīng)式編程模式并探尋其解決常見問(wèn)題的好方法
● 了解架構(gòu)的發(fā)展趨勢(shì)和從MVC架構(gòu)到無(wú)服務(wù)器應(yīng)用架構(gòu)的轉(zhuǎn)變
● 應(yīng)用Java的新功能特性及其實(shí)踐
借助設(shè)計(jì)模式,開發(fā)者可以改進(jìn)代碼庫(kù),提高代碼可重用性,并使技術(shù)架構(gòu)更加健壯。隨著編程語(yǔ)言的不斷發(fā)展,新的語(yǔ)言特性在得到廣泛應(yīng)用之前往往需要大量時(shí)間去理解。本書旨在降低接受最新趨勢(shì)的難度,為開發(fā)人員提供良好的實(shí)例。
本書的目標(biāo)讀者
本書適用于每一位有意愿編寫高質(zhì)量代碼的Java開發(fā)人員。本書講述了很多開發(fā)者在編碼時(shí)經(jīng)常疏忽的最佳實(shí)踐。書中涵蓋了許多設(shè)計(jì)模式,這些設(shè)計(jì)模式經(jīng)開發(fā)團(tuán)隊(duì)實(shí)踐和測(cè)試過(guò),是用來(lái)解決特定問(wèn)題的最佳方案。
本書內(nèi)容
第1章介紹了Java語(yǔ)言不同的編程范式。
第2章介紹了多種設(shè)計(jì)模式中的創(chuàng)建型模式,講述了多種類型的創(chuàng)建型設(shè)計(jì)模式。
第3章介紹了行為型設(shè)計(jì)模式,主要解析了多種用來(lái)管理代碼和對(duì)象行為的設(shè)計(jì)模式。
第4章介紹了結(jié)構(gòu)型設(shè)計(jì)模式,詳細(xì)解析了用于管理對(duì)象結(jié)構(gòu)的設(shè)計(jì)模式。
第5章向讀者介紹了函數(shù)式編程及與之相關(guān)的設(shè)計(jì)模式。
第6章通過(guò)實(shí)例介紹了響應(yīng)式編程及其Java實(shí)現(xiàn)。
第7章進(jìn)一步探索了響應(yīng)式編程的核心內(nèi)容及與之相關(guān)的設(shè)計(jì)模式。
第8章從MVC架構(gòu)到微服務(wù)和無(wú)服務(wù)器應(yīng)用,探索了近年來(lái)開發(fā)者嘗試和測(cè)試過(guò)的多種架構(gòu)模式。
第9章介紹了Java的歷史、最佳實(shí)踐和最新版Java中的更新,并在最后表達(dá)了作者對(duì)Java未來(lái)的期待。
如何充分利用本書
擁有Java開發(fā)經(jīng)驗(yàn)者將能從本書中獲益良多,推薦讀者在閱讀過(guò)程中探索并充分實(shí)踐各章中提供的示例代碼。
下載示例代碼及彩色圖像
本書的示例代碼及所有截圖和圖表,可以從http://www.packtpub.com通過(guò)個(gè)人賬號(hào)下載,也可以訪問(wèn)華章圖書官網(wǎng)http://www.hzbook.com,通過(guò)注冊(cè)并登錄個(gè)人賬號(hào)下載。
卡馬爾米特·辛格(Kamalmeet Singh),在15歲時(shí)首次嘗試了編程并立刻愛上了它。他在獲得信息技術(shù)學(xué)士學(xué)位之后加入了一家創(chuàng)業(yè)公司,在那里進(jìn)一步提升了對(duì)Java編程的熱愛之情。IT行業(yè)13年的工作經(jīng)驗(yàn),以及在不同的公司、國(guó)家和領(lǐng)域的沉淀,使他成長(zhǎng)為一名開發(fā)人員和技術(shù)架構(gòu)師。他使用的技術(shù)包括云計(jì)算、機(jī)器學(xué)習(xí)、增強(qiáng)現(xiàn)實(shí)、無(wú)服務(wù)器應(yīng)用程序、微服務(wù)等,但他的愛仍然是Java。
艾德里安·伊恩庫(kù)列斯庫(kù)(Adrian Ianculescu),一名擁有20年編程經(jīng)驗(yàn)的軟件開發(fā)人員,其中12年使用Java。他在2-40人的團(tuán)隊(duì)中工作,他意識(shí)到開發(fā)軟件不僅僅是編寫代碼,而對(duì)以不同的方法和框架設(shè)計(jì)軟件和架構(gòu)產(chǎn)生了興趣。在公司工作一段時(shí)間之后,他開始轉(zhuǎn)變?yōu)樽杂陕殬I(yè)者和企業(yè)家,以追隨他童年時(shí)代的夢(mèng)想制作游戲。
路西安-保羅·托爾耶(Lucian-Paul Torje),一位有抱負(fù)的軟件工匠,在軟件行業(yè)工作了近15年,幾乎對(duì)所有與技術(shù)有關(guān)的事情都感興趣,這就是他涉獵廣泛的原因,包括從MS-DOSTSR到微服務(wù),從Atmel微控制器到Android、iOS和Chromebook,從C/C 到Java,從Oracle到MongoDB。
譯者簡(jiǎn)介:
張小坤,軟件開發(fā)工程師、項(xiàng)目經(jīng)理、系統(tǒng)架構(gòu)師,畢業(yè)于北京理工大學(xué)軟件學(xué)院,長(zhǎng)期從事系統(tǒng)設(shè)計(jì)開發(fā)工作,經(jīng)驗(yàn)豐富,對(duì)設(shè)計(jì)模式有深刻的認(rèn)識(shí)和理解。
黃凱,系統(tǒng)架構(gòu)師,畢業(yè)于北京理工大學(xué)軟件學(xué)院,一直從事軟件研發(fā)工作,對(duì)設(shè)計(jì)模式與實(shí)際開發(fā)中的應(yīng)用具有較為豐富的經(jīng)驗(yàn)。
賀濤,高級(jí)軟件工程師、項(xiàng)目經(jīng)理,長(zhǎng)期致力于系統(tǒng)設(shè)計(jì)和應(yīng)用研發(fā)工作,實(shí)踐經(jīng)驗(yàn)豐富。
譯者序
前言
關(guān)于作者
關(guān)于評(píng)審者
第1章 從面向?qū)ο蟮胶瘮?shù)式編程 1
1.1 Java簡(jiǎn)介 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)一建模語(yǔ)言簡(jiǎn)介 8
1.5 設(shè)計(jì)模式和原則 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 無(wú)鎖的線程安全單例模式 21
2.1.4 提前加載和延遲加載 21
2.2 工廠模式 22
2.2.1 簡(jiǎn)單工廠模式 22
2.2.2 工廠方法模式 25
2.2.3 抽象工廠模式 27
2.2.4 簡(jiǎn)單工廠、工廠方法與抽象工廠模式之間的對(duì)比 28
2.3 建造者模式 29
2.3.1 汽車建造者樣例 30
2.3.2 簡(jiǎn)化的建造者模式 32
2.3.3 擁有方法鏈的匿名建造者 32
2.4 原型模式 33
2.5 對(duì)象池模式 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 空對(duì)象模式 57
3.12 訪問(wèn)者模式 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ù)式編程簡(jiǎn)介 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è)計(jì)模式 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è)計(jì)模式 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簡(jiǎn)介 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 過(guò)濾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è)計(jì)模式 140
7.1 響應(yīng)模式 140
7.1.1 請(qǐng)求-響應(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 有限隊(duì)列模式 151
7.2.4 監(jiān)控模式 152
7.2.5 艙壁模式 152
7.3 柔性模式 152
7.3.1 單一職責(zé)模式 153
7.3.2 無(wú)狀態(tài)服務(wù)模式 154
7.3.3 自動(dòng)伸縮模式 156
7.3.4 自包含模式 156
7.4 消息驅(qū)動(dòng)通信模式 157
7.4.1 事件驅(qū)動(dòng)通信模式 157
7.4.2 出版者-訂閱者模式 157
7.4.3 冪等性模式 158
7.5 總結(jié) 158
第8章 應(yīng)用架構(gòu)的發(fā)展趨勢(shì) 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