黨的二十大報告指出: 教育、科技、人才是全面建設社會主義現(xiàn)代化國家的基礎性、戰(zhàn)略性支撐。必須堅持科技是第一生產(chǎn)力、人才是第一資源、創(chuàng)新是第一動力,深入實施科教興國戰(zhàn)略、人才強國戰(zhàn)略、創(chuàng)新驅(qū)動發(fā)展戰(zhàn)略,開辟發(fā)展新領(lǐng)域新賽道,不斷塑造發(fā)展新動能新優(yōu)勢。高等教育與經(jīng)濟社會發(fā)展緊密相連,對促進就業(yè)創(chuàng)業(yè)、助力經(jīng)濟社會發(fā)展、增進人民福祉具有重要意義。
設計模式和敏捷開發(fā)方法的創(chuàng)始人之一Erich Gamma曾說過: 設計和開發(fā)面向?qū)ο筌浖欠浅@щy的,而設計和開發(fā)可復用的面向?qū)ο筌浖⻊t更加困難。正因為如此,在軟件開發(fā)過程中,有經(jīng)驗的設計者往往會重復使用一些他們在以前的設計工作中曾經(jīng)用到的成功而又有效的解決方案,這些解決方案可以提高開發(fā)人員的開發(fā)效率與軟件質(zhì)量,并使得所設計的軟件更加靈活,易于擴展,可復用性也更高。這些解決方案就是設計模式。設計模式為實現(xiàn)可維護性復用而誕生,無論是面向?qū)ο缶幊痰某鯇W者還是有一定編程經(jīng)驗的程序員,都可以從設計模式的學習和使用中深入理解面向?qū)ο笏枷氲木A,開發(fā)出可擴展性和可復用性俱佳的軟件。
設計模式是前人經(jīng)驗的積累,它讓軟件變得更像一件藝術(shù)品,而不是一堆難以維護和重用的代碼,它已經(jīng)成功應用于眾多軟件設計中,是一個優(yōu)秀的面向?qū)ο筌浖_發(fā)人員所必須掌握的知識和技能。本書編者在十多年的軟件開發(fā)和計算機教育教學工作中積累了豐富的設計模式使用經(jīng)驗和教學經(jīng)驗,也深刻體會到學習設計模式的重要性。目前,國內(nèi)外越來越多的高校在計算機及軟件工程相關(guān)專業(yè)的教學中開設了軟件體系結(jié)構(gòu)面向?qū)ο蠓治雠c設計等課程,而設計模式是這些課程的核心組成部分,還有的學校將設計模式作為一門單獨的課程來開設。此外,很多軟件培訓機構(gòu)在軟件工程師培訓課程中也包含了設計模式相關(guān)內(nèi)容,在各類計算機考試和企業(yè)招聘筆試中設計模式相關(guān)考題也占據(jù)了一定的比例。編者在過去幾年中已完成多種設計模式教材的編寫工作,本書融合了之前幾種教材的優(yōu)點,力求為廣大師生提供一本內(nèi)容全面、實用性強、通俗易懂的設計模式教材。
本書的編寫目的在于通過大量應用實例和習題,理論聯(lián)系實際,使讀者更快、更好地理解和掌握每個設計模式。全書共26章,可分為四部分:
第一部分包含第1章和第2章,主要介紹與設計模式相關(guān)的一些基礎知識,包括設計模式概述、7個常用的面向?qū)ο笤O計原則等內(nèi)容,為后續(xù)設計模式的學習奠定基礎;
第二部分包含第3~8章,介紹6種常用的創(chuàng)建型設計模式,分別是簡單工廠模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式和單例模式;
第三部分包含第9~15章,介紹7種常用的結(jié)構(gòu)型設計模式,分別是適配器模式、橋接模式、組合模式、裝飾模式、外觀模式、享元模式和代理模式;
第四部分包含第16~26章,介紹11種常用的行為型設計模式,分別是職責鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態(tài)模式、策略模式、模板方法模式和訪問者模式。
本書結(jié)合大量項目應用實例對每個設計模式進行了細致的講解。全書結(jié)構(gòu)合理、條理清晰、內(nèi)容豐富、講解深入,且在每章后面都配有大量的習題,很多習題也都基于項目實例,讓讀者在學完相關(guān)知識后能夠更好地消化和鞏固所學知識。此外,在附錄中還提供了UML類圖相關(guān)知識的介紹。
在本書的編寫過程中參考了大量已有的設計模式書籍,集各家之所長,并進行了適當?shù)恼砗蛿U展,將一些原本深奧并難以理解的設計思想通過簡單的應用實例來解析,讓讀者能夠輕松掌握面向?qū)ο笤O計思想的精髓。本書以實例驅(qū)動教學為整體編寫原則,每個模式的學習都基于至少一個應用實例,結(jié)合應用實例分析和講解每個設計模式,力求通過最通俗易懂的方式讓讀者學習和理解設計模式,讓讀者在真實項目實例的引導下學會選擇和合理運用設計模式。在設計模式講解部分,每章的基本結(jié)構(gòu)如下:
為便于教學,本書提供豐富的配套資源,包括教學大綱、教學課件、電子教案、教學進度表、在線作業(yè)、習題答案和600分鐘的微課視頻。此外,本書還提供完整的設計模式及應用實例的UML結(jié)構(gòu)圖(類圖)和Java實現(xiàn)代碼,所有類圖均嚴格按照UML 2.X標準繪制,所有代碼均在Eclipse Neon v4.6.0中通過測試且運行無誤。
資源下載提示
課件等資源: 掃描封底的圖書資源二維碼,在公眾號書圈下載。
素材(源碼)等資源: 掃描目錄上方的二維碼下載。
在線自測題: 掃描封底的作業(yè)系統(tǒng)二維碼,再掃描自測題二維碼在線做題。
微課視頻: 掃描封底的文泉云盤防盜碼,再掃描書中相應章節(jié)的視頻講解二維碼,可以在線學習。
本書既可作為高等院校計算機及軟件相關(guān)專業(yè)軟件設計模式軟件體系結(jié)構(gòu)面向?qū)ο蠓治雠c設計等課程教材,也可作為各軟件培訓機構(gòu)培訓教材及全國計算機技術(shù)與軟件專業(yè)技術(shù)資格(水平)考試輔導教材,還可作為軟件架構(gòu)師、軟件工程師及廣大軟件愛好者的自學讀物和參考用書。
由于時間倉促,加之編者學識有限,雖經(jīng)多次審閱與校稿,但書中不足和疏漏之處在所難免,懇請廣大讀者批評、指正,力求使本書精益求精,更趨完美。
編者
2024年8月
第一部分設計模式基礎
第1章設計模式概述
1.1設計模式的誕生與發(fā)展
1.1.1模式的誕生與定義
1.1.2軟件模式概述
1.1.3設計模式的發(fā)展
1.2設計模式的定義與分類
1.2.1設計模式的定義
1.2.2設計模式的基本要素
1.2.3設計模式的分類
1.3GoF設計模式簡介
1.4設計模式的優(yōu)點
1.5本章小結(jié)
1.6習題
第2章面向?qū)ο笤O計原則
2.1面向?qū)ο笤O計原則概述
2.2單一職責原則
2.3開閉原則
2.4里氏代換原則
2.5依賴倒轉(zhuǎn)原則
2.6接口隔離原則
2.7合成復用原則
2.8迪米特法則
2.9本章小結(jié)
2.10習題
第二部分創(chuàng)建型設計模式
第3章簡單工廠模式
3.1創(chuàng)建型模式
3.2簡單工廠模式概述
3.3簡單工廠模式結(jié)構(gòu)與實現(xiàn)
3.3.1簡單工廠模式結(jié)構(gòu)
3.3.2簡單工廠模式實現(xiàn)
3.4簡單工廠模式應用實例
3.5關(guān)于創(chuàng)建對象與使用對象
3.6簡單工廠模式的簡化
3.7簡單工廠模式優(yōu)缺點與適用環(huán)境
3.7.1簡單工廠模式優(yōu)點
3.7.2簡單工廠模式缺點
3.7.3簡單工廠模式適用環(huán)境
3.8本章小結(jié)
3.9習題
第4章工廠方法模式
4.1工廠方法模式概述
4.2工廠方法模式結(jié)構(gòu)與實現(xiàn)
4.2.1工廠方法模式結(jié)構(gòu)
4.2.2工廠方法模式實現(xiàn)
4.3工廠方法模式應用實例
4.4反射機制與配置文件
4.5工廠方法的重載
4.6工廠方法的隱藏
4.7工廠方法模式優(yōu)缺點與適用環(huán)境
4.7.1工廠方法模式優(yōu)點
4.7.2工廠方法模式缺點
4.7.3工廠方法模式適用環(huán)境
4.8本章小結(jié)
4.9習題
第5章抽象工廠模式
5.1產(chǎn)品等級結(jié)構(gòu)與產(chǎn)品族
5.2抽象工廠模式概述
5.3抽象工廠模式結(jié)構(gòu)與實現(xiàn)
5.3.1抽象工廠模式結(jié)構(gòu)
5.3.2抽象工廠模式實現(xiàn)
5.4抽象工廠模式應用實例
5.5開閉原則的傾斜性
5.6抽象工廠模式優(yōu)缺點與適用環(huán)境
5.6.1抽象工廠模式優(yōu)點
5.6.2抽象工廠模式缺點
5.6.3抽象工廠模式適用環(huán)境
5.7本章小結(jié)
5.8習題
第6章建造者模式
6.1建造者模式概述
6.2建造者模式結(jié)構(gòu)與實現(xiàn)
6.2.1建造者模式結(jié)構(gòu)
6.2.2建造者模式實現(xiàn)
6.3建造者模式應用實例
6.4指揮者類的深入討論
6.5建造者模式優(yōu)缺點與適用環(huán)境
6.5.1建造者模式優(yōu)點
6.5.2建造者模式缺點
6.5.3建造者模式適用環(huán)境
6.6本章小結(jié)
6.7習題
第7章原型模式
7.1原型模式概述
7.2原型模式結(jié)構(gòu)與實現(xiàn)
7.2.1原型模式結(jié)構(gòu)
7.2.2淺克隆與深克隆
7.2.3原型模式實現(xiàn)
7.3原型模式應用實例
7.4原型管理器
7.5原型模式優(yōu)缺點與適用環(huán)境
7.5.1原型模式優(yōu)點
7.5.2原型模式缺點
7.5.3原型模式適用環(huán)境
7.6本章小結(jié)
7.7習題
第8章單例模式
8.1單例模式概述
8.2單例模式結(jié)構(gòu)與實現(xiàn)
8.2.1單例模式結(jié)構(gòu)
8.2.2單例模式實現(xiàn)
8.3單例模式應用實例
8.4餓漢式單例與懶漢式單例
8.5使用靜態(tài)內(nèi)部類和枚舉實現(xiàn)單例模式
8.6單例模式優(yōu)缺點與適用環(huán)境
8.6.1單例模式優(yōu)點
8.6.2單例模式缺點
8.6.3單例模式適用環(huán)境
8.7本章小結(jié)
8.8習題
第三部分結(jié)構(gòu)型設計模式
第9章適配器模式
9.1結(jié)構(gòu)型模式
9.2適配器模式概述
9.3適配器模式結(jié)構(gòu)與實現(xiàn)
9.3.1適配器模式結(jié)構(gòu)
9.3.2適配器模式實現(xiàn)
9.4適配器模式應用實例
9.5缺省適配器模式
9.6雙向適配器
9.7適配器模式優(yōu)缺點與適用環(huán)境
9.7.1適配器模式優(yōu)點
9.7.2適配器模式缺點
9.7.3適配器模式適用環(huán)境
9.8本章小結(jié)
9.9習題
第10章橋接模式
10.1橋接模式概述
10.2橋接模式結(jié)構(gòu)與實現(xiàn)
10.2.1橋接模式結(jié)構(gòu)
10.2.2橋接模式實現(xiàn)
10.3橋接模式應用實例
10.4橋接模式與適配器模式的聯(lián)用
10.5橋接模式優(yōu)缺點與適用環(huán)境
10.5.1橋接模式優(yōu)點
10.5.2橋接模式缺點
10.5.3橋接模式適用環(huán)境
10.6本章小結(jié)
10.7習題
第11章組合模式
11.1組合模式概述
11.2組合模式結(jié)構(gòu)與實現(xiàn)
11.2.1組合模式結(jié)構(gòu)
11.2.2組合模式實現(xiàn)
11.3組合模式應用實例
11.4透明組合模式與安全組合模式
11.5組合模式優(yōu)缺點與適用環(huán)境
11.5.1組合模式優(yōu)點
11.5.2組合模式缺點
11.5.3組合模式適用環(huán)境
11.6本章小結(jié)
11.7習題
第12章裝飾模式
12.1裝飾模式概述
12.2裝飾模式結(jié)構(gòu)與實現(xiàn)
12.2.1裝飾模式結(jié)構(gòu)
12.2.2裝飾模式實現(xiàn)
12.3裝飾模式應用實例
12.4透明裝飾模式與半透明裝飾模式
12.5裝飾模式優(yōu)缺點與適用環(huán)境
12.5.1裝飾模式優(yōu)點
12.5.2裝飾模式缺點
12.5.3裝飾模式適用環(huán)境
12.6本章小結(jié)
12.7習題
第13章外觀模式
13.1外觀模式概述
13.2外觀模式結(jié)構(gòu)與實現(xiàn)
13.2.1外觀模式結(jié)構(gòu)
13.2.2外觀模式實現(xiàn)
13.3外觀模式應用實例
13.4抽象外觀類
13.5外觀模式優(yōu)缺點與適用環(huán)境
13.5.1外觀模式優(yōu)點
13.5.2外觀模式缺點
13.5.3外觀模式適用環(huán)境
13.6本章小結(jié)
13.7習題
第14章享元模式
14.1享元模式概述
14.2享元模式結(jié)構(gòu)與實現(xiàn)
14.2.1享元模式結(jié)構(gòu)
14.2.2享元模式實現(xiàn)
14.3享元模式應用實例
14.4有外部狀態(tài)的享元模式
14.5單純享元模式與復合享元模式
14.6享元模式與String類
14.7享元模式優(yōu)缺點與適用環(huán)境
14.7.1享元模式優(yōu)點
14.7.2享元模式缺點
14.7.3享元模式適用環(huán)境
14.8本章小結(jié)
14.9習題
第15章代理模式
15.1代理模式概述
15.2代理模式結(jié)構(gòu)與實現(xiàn)
15.2.1代理模式結(jié)構(gòu)
15.2.2代理模式實現(xiàn)
15.3代理模式應用實例
15.4遠程代理
15.5虛擬代理
15.6動態(tài)代理
15.7代理模式優(yōu)缺點與適用環(huán)境
15.7.1代理模式優(yōu)點
15.7.2代理模式缺點
15.7.3代理模式適用環(huán)境
15.8本章小結(jié)
15.9習題
第四部分行為型設計模式
第16章職責鏈模式
16.1行為型模式
16.2職責鏈模式概述
16.3職責鏈模式結(jié)構(gòu)與實現(xiàn)
16.3.1職責鏈模式結(jié)構(gòu)
16.3.2職責鏈模式實現(xiàn)
16.4職責鏈模式應用實例
16.5純與不純的職責鏈模式
16.6職責鏈模式優(yōu)缺點與適用環(huán)境
16.6.1職責鏈模式優(yōu)點
16.6.2職責鏈模式缺點
16.6.3職責鏈模式適用環(huán)境
16.7本章小結(jié)
16.8習題
第17章命令模式
17.1命令模式概述
17.2命令模式結(jié)構(gòu)與實現(xiàn)
17.2.1命令模式結(jié)構(gòu)
17.2.2命令模式實現(xiàn)
17.3命令模式應用實例
17.4實現(xiàn)命令隊列
17.5記錄請求日志
17.6實現(xiàn)撤銷操作
17.7宏命令
17.8命令模式優(yōu)缺點與適用環(huán)境
17.8.1命令模式優(yōu)點
17.8.2命令模式缺點
17.8.3命令模式適用環(huán)境
17.9本章小結(jié)
17.10習題
第18章解釋器模式
18.1解釋器模式概述
18.2文法規(guī)則和抽象語法樹
18.3解釋器模式結(jié)構(gòu)與實現(xiàn)
18.3.1解釋器模式結(jié)構(gòu)
18.3.2解釋器模式實現(xiàn)
18.4解釋器模式應用實例
18.5解釋器模式優(yōu)缺點與適用環(huán)境
18.5.1解釋器模式優(yōu)點
18.5.2解釋器模式缺點
18.5.3解釋器模式適用環(huán)境
18.6本章小結(jié)
18.7習題
第19章迭代器模式
19.1迭代器模式概述
19.2迭代器模式結(jié)構(gòu)與實現(xiàn)
19.2.1迭代器模式結(jié)構(gòu)
19.2.2迭代器模式實現(xiàn)
19.3迭代器模式應用實例
19.4使用內(nèi)部類實現(xiàn)迭代器
19.5Java內(nèi)置迭代器
19.6迭代器模式優(yōu)缺點與適用環(huán)境
19.6.1迭代器模式優(yōu)點
19.6.2迭代器模式缺點
19.6.3迭代器模式適用環(huán)境
19.7本章小結(jié)
19.8習題
第20章中介者模式
20.1中介者模式概述
20.2中介者模式結(jié)構(gòu)與實現(xiàn)
20.2.1中介者模式結(jié)構(gòu)
20.2.2中介者模式實現(xiàn)
20.3中介者模式應用實例
20.4擴展中介者與同事類
20.5中介者模式優(yōu)缺點與適用環(huán)境
20.5.1中介者模式優(yōu)點
20.5.2中介者模式缺點
20.5.3中介者模式適用環(huán)境
20.6本章小結(jié)
20.7習題
第21章備忘錄模式
21.1備忘錄模式概述
21.2備忘錄模式結(jié)構(gòu)與實現(xiàn)
21.2.1備忘錄模式結(jié)構(gòu)
21.2.2備忘錄模式實現(xiàn)
21.3備忘錄模式應用實例
21.4實現(xiàn)多次撤銷
21.5備忘錄模式優(yōu)缺點與適用環(huán)境
21.5.1備忘錄模式優(yōu)點
21.5.2備忘錄模式缺點
21.5.3備忘錄模式適用環(huán)境
21.6本章小結(jié)
21.7習題
第22章觀察者模式
22.1觀察者模式概述
22.2觀察者模式結(jié)構(gòu)與實現(xiàn)
22.2.1觀察者模式結(jié)構(gòu)
22.2.2觀察者模式實現(xiàn)
22.3觀察者模式應用實例
22.4JDK對觀察者模式的支持
22.5觀察者模式與Java事件處理
22.6觀察者模式與MVC
22.7觀察者模式優(yōu)缺點與適用環(huán)境
22.7.1觀察者模式優(yōu)點
22.7.2觀察者模式缺點
22.7.3觀察者模式適用環(huán)境
22.8本章小結(jié)
22.9習題
第23章狀態(tài)模式
23.1狀態(tài)模式概述
23.2狀態(tài)模式結(jié)構(gòu)與實現(xiàn)
23.2.1狀態(tài)模式結(jié)構(gòu)
23.2.2狀態(tài)模式實現(xiàn)
23.3狀態(tài)模式應用實例
23.4共享狀態(tài)
23.5使用環(huán)境類實現(xiàn)狀態(tài)轉(zhuǎn)換
23.6狀態(tài)模式優(yōu)缺點與適用環(huán)境
23.6.1狀態(tài)模式優(yōu)點
23.6.2狀態(tài)模式缺點
23.6.3狀態(tài)模式適用環(huán)境
23.7本章小結(jié)
23.8習題
第24章策略模式
24.1策略模式概述
24.2策略模式結(jié)構(gòu)與實現(xiàn)
24.2.1策略模式結(jié)構(gòu)
24.2.2策略模式實現(xiàn)
24.3策略模式應用實例
24.4Java SE中的布局管理
24.5策略模式優(yōu)缺點與適用環(huán)境
24.5.1策略模式優(yōu)點
24.5.2策略模式缺點
24.5.3策略模式適用環(huán)境
24.6本章小結(jié)
24.7習題
第25章模板方法模式
25.1模板方法模式概述
25.2模板方法模式結(jié)構(gòu)與實現(xiàn)
25.2.1模板方法模式結(jié)構(gòu)
25.2.2模板方法模式實現(xiàn)
25.3模板方法模式應用實例
25.4鉤子方法的使用
25.5模板方法模式優(yōu)缺點與適用環(huán)境
25.5.1模板方法模式優(yōu)點
25.5.2模板方法模式缺點
25.5.3模板方法模式適用環(huán)境
25.6本章小結(jié)
25.7習題
第26章訪問者模式
26.1訪問者模式概述
26.2訪問者模式結(jié)構(gòu)與實現(xiàn)
26.2.1訪問者模式結(jié)構(gòu)
26.2.2訪問者模式實現(xiàn)
26.3訪問者模式應用實例
26.4訪問者模式與組合模式聯(lián)用
26.5訪問者模式優(yōu)缺點與適用環(huán)境
26.5.1訪問者模式優(yōu)點
26.5.2訪問者模式缺點
26.5.3訪問者模式適用環(huán)境
26.6本章小結(jié)
26.7習題
附錄AUML類圖
A.1UML概述
A.2類與類的UML表示
A.3類之間的關(guān)系
參考文獻