編輯推薦
內容豐富,詳細講解7個麵嚮對象設計原則和24個常用設計模式。
實例驅動,提供24個模式應用實例的完整設計方案和程序代碼
學練結閤,包含超過150道習題和3套設計模式模擬試題
內容簡介
本書使用Java語言詳細講解常用的軟件設計模式。全書共26章,內容包括設計模式概述、麵嚮對象設計原則、簡單工廠模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式、單例模式、適配器模式、橋接模式、組閤模式、裝飾模式、外觀模式、享元模式、代理模式、職責鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模闆方法模式和訪問者模式。
本書結閤大量項目實例對每一個設計模式進行全麵、細緻的講解。全書結構閤理、條理清晰、內容豐富,且在每一章後麵都配有一定數量的習題,在附錄中還提供瞭UML類圖相關知識的介紹和3套設計模式模擬試題。另外,掃描書中二維碼,可以觀看與本書內容配套的課程教學視頻,本書還提供瞭完整的教學資源。
本書既可作為高等院校計算機及軟件相關專業本科生和研究生軟件設計模式、軟件體係結構、麵嚮對象分析與設計等課程教材,也可作為各軟件培訓機構培訓教材及全國計算機技術與軟件專業技術資格(水平)考試輔導教材,還可作為軟件架構師、軟件工程師及廣大軟件愛好者的自學讀物和參考用書。
作者簡介
劉偉,中南大學計算機應用技術博士,高級工程師,中國計算機學會會員,國傢認證係統分析師,首批國傢認證係統架構設計師,數據庫係統工程師,微軟認證係統工程師,CSDN認證專傢及知名博主。具有十多年軟件開發、項目管理及教育培訓經驗。
目錄
目錄
第1章設計模式概述
1.1設計模式的誕生與發展
1.1.1模式的誕生與定義
1.1.2軟件模式概述
1.1.3設計模式的發展
1.2設計模式的定義與分類
1.2.1設計模式的定義
1.2.2設計模式的基本要素
1.2.3設計模式的分類
1.3GoF設計模式簡介
1.4設計模式的優點
1.5本章小結
1.6習題
第2章麵嚮對象設計原則
2.1麵嚮對象設計原則概述
2.2單一職責原則
2.3開閉原則
2.4裏氏代換原則
2.5依賴倒轉原則
2.6接口隔離原則
2.7閤成復用原則
2.8迪米特法則
2.9本章小結
2.10習題
第3章簡單工廠模式
3.1創建型模式
3.2簡單工廠模式概述
3.3簡單工廠模式結構與實現
3.3.1簡單工廠模式結構
3.3.2簡單工廠模式實現
3.4簡單工廠模式應用實例
3.5關於創建對象與使用對象
3.6簡單工廠模式的簡化
3.7簡單工廠模式優/缺點與適用環境
3.7.1簡單工廠模式優點
3.7.2簡單工廠模式缺點
3.7.3簡單工廠模式適用環境
3.8本章小結
3.9習題
第4章工廠方法模式
4.1工廠方法模式概述
4.2工廠方法模式結構與實現
4.2.1工廠方法模式結構
4.2.2工廠方法模式實現
4.3工廠方法模式應用實例
4.4反射機製與配置文件
4.5工廠方法的重載
4.6工廠方法的隱藏
4.7工廠方法模式優/缺點與適用環境
4.7.1工廠方法模式優點
4.7.2工廠方法模式缺點
4.7.3工廠方法模式適用環境
4.8本章小結
4.9習題
第5章抽象工廠模式
5.1産品等級結構與産品族
5.2抽象工廠模式概述
5.3抽象工廠模式結構與實現
5.3.1抽象工廠模式結構
5.3.2抽象工廠模式實現
5.4抽象工廠模式應用實例
5.5開閉原則的傾斜性
5.6抽象工廠模式優/缺點與適用環境
5.6.1抽象工廠模式優點
5.6.2抽象工廠模式缺點
5.6.3抽象工廠模式適用環境
5.7本章小結
5.8習題
第6章建造者模式
6.1建造者模式概述
6.2建造者模式結構與實現
6.2.1建造者模式結構
6.2.2建造者模式實現
6.3建造者模式應用實例
6.4指揮者類的深入討論
6.5建造者模式優/缺點與適用環境
6.5.1建造者模式優點
6.5.2建造者模式缺點
6.5.3建造者模式適用環境
6.6本章小結
6.7習題
第7章原型模式
7.1原型模式概述
7.2原型模式結構與實現
7.2.1原型模式結構
7.2.2淺剋隆與深剋隆
7.2.3原型模式實現
7.3原型模式應用實例
7.4原型管理器
7.5原型模式優/缺點與適用環境
7.5.1原型模式優點
7.5.2原型模式缺點
7.5.3原型模式適用環境
7.6本章小結
7.7習題
第8章單例模式
8.1單例模式概述
8.2單例模式結構與實現
8.2.1單例模式結構
8.2.2單例模式實現
8.3單例模式應用實例
8.4餓漢式單例與懶漢式單例
8.5單例模式優/缺點與適用環境
8.5.1單例模式優點
8.5.2單例模式缺點
8.5.3單例模式適用環境
8.6本章小結
8.7習題
第9章適配器模式
9.1結構型模式
9.2適配器模式概述
9.3適配器模式結構與實現
9.3.1適配器模式結構
9.3.2適配器模式實現
9.4適配器模式應用實例
9.5缺省適配器模式
9.6雙嚮適配器
9.7適配器模式優/缺點與適用環境
9.7.1適配器模式優點
9.7.2適配器模式缺點
9.7.3適配器模式適用環境
9.8本章小結
9.9習題
第10章橋接模式
10.1橋接模式概述
10.2橋接模式結構與實現
10.2.1橋接模式結構
10.2.2橋接模式實現
10.3橋接模式應用實例
10.4橋接模式與適配器模式的聯用
10.5橋接模式優/缺點與適用環境
10.5.1橋接模式優點
10.5.2橋接模式缺點
10.5.3橋接模式適用環境
10.6本章小結
10.7習題
第11章組閤模式
11.1組閤模式概述
11.2組閤模式結構與實現
11.2.1組閤模式結構
11.2.2組閤模式實現
11.3組閤模式應用實例
11.4透明組閤模式與安全組閤模式
11.5組閤模式優/缺點與適用環境
11.5.1組閤模式優點
11.5.2組閤模式缺點
11.5.3組閤模式適用環境
11.6本章小結
11.7習題
第12章裝飾模式
12.1裝飾模式概述
12.2裝飾模式結構與實現
12.2.1裝飾模式結構
12.2.2裝飾模式實現
12.3裝飾模式應用實例
12.4透明裝飾模式與半透明裝飾模式
12.5裝飾模式優/缺點與適用環境
12.5.1裝飾模式優點
12.5.2裝飾模式缺點
12.5.3裝飾模式適用環境
12.6本章小結
12.7習題
第13章外觀模式
13.1外觀模式概述
13.2外觀模式結構與實現
13.2.1外觀模式結構
13.2.2外觀模式實現
13.3外觀模式應用實例
13.4抽象外觀類
13.5外觀模式優/缺點與適用環境
13.5.1外觀模式優點
13.5.2外觀模式缺點
13.5.3外觀模式適用環境
13.6本章小結
13.7習題
第14章享元模式
14.1享元模式概述
14.2享元模式結構與實現
14.2.1享元模式結構
14.2.2享元模式實現
14.3享元模式應用實例
14.4有外部狀態的享元模式
14.5單純享元模式與復閤享元模式
14.6享元模式與String類
14.7享元模式優/缺點與適用環境
14.7.1享元模式優點
14.7.2享元模式缺點
14.7.3享元模式適用環境
14.8本章小結
14.9習題
第15章代理模式
15.1代理模式概述
15.2代理模式結構與實現
15.2.1代理模式結構
15.2.2代理模式實現
15.3代理模式應用實例
15.4遠程代理
15.5虛擬代理
15.6Java動態代理
15.7代理模式優/缺點與適用環境
15.7.1代理模式優點
15.7.2代理模式缺點
15.7.3代理模式適用環境
15.8本章小結
15.9習題
第16章職責鏈模式
16.1行為型模式
16.2職責鏈模式概述
16.3職責鏈模式結構與實現
16.3.1職責鏈模式結構
16.3.2職責鏈模式實現
16.4職責鏈模式應用實例
16.5純與不純的職責鏈模式
16.6職責鏈模式優/缺點與適用環境
16.6.1職責鏈模式優點
16.6.2職責鏈模式缺點
16.6.3職責鏈模式適用環境
16.7本章小結
16.8習題
第17章命令模式
17.1命令模式概述
17.2命令模式結構與實現
17.2.1命令模式結構
17.2.2命令模式實現
17.3命令模式應用實例
17.4實現命令隊列
17.5記錄請求日誌
17.6實現撤銷操作
17.7宏命令
17.8命令模式優/缺點與適用環境
17.8.1命令模式優點
17.8.2命令模式缺點
17.8.3命令模式適用環境
17.9本章小結
17.10習題
第18章解釋器模式
18.1解釋器模式概述
18.2文法規則和抽象語法樹
18.3解釋器模式結構與實現
18.3.1解釋器模式結構
18.3.2解釋器模式實現
18.4解釋器模式應用實例
18.5解釋器模式優/缺點與適用環境
18.5.1解釋器模式優點
18.5.2解釋器模式缺點
18.5.3解釋器模式適用環境
18.6本章小結
18.7習題
第19章迭代器模式
19.1迭代器模式概述
19.2迭代器模式結構與實現
19.2.1迭代器模式結構
19.2.2迭代器模式實現
19.3迭代器模式應用實例
19.4使用內部類實現迭代器
19.5Java內置迭代器
19.6迭代器模式優/缺點與適用環境
19.6.1迭代器模式優點
19.6.2迭代器模式缺點
19.6.3迭代器模式適用環境
19.7本章小結
19.8習題
第20章中介者模式
20.1中介者模式概述
20.2中介者模式結構與實現
20.2.1中介者模式結構
20.2.2中介者模式實現
20.3中介者模式應用實例
20.4擴展中介者與同事類
20.5中介者模式優/缺點與適用環境
20.5.1中介者模式優點
20.5.2中介者模式缺點
20.5.3中介者模式適用環境
20.6本章小結
20.7習題
第21章備忘錄模式
21.1備忘錄模式概述
21.2備忘錄模式結構與實現
21.2.1備忘錄模式結構
21.2.2備忘錄模式實現
21.3備忘錄模式應用實例
21.4實現多次撤銷
21.5備忘錄模式優/缺點與適用環境
21.5.1備忘錄模式優點
21.5.2備忘錄模式缺點
21.5.3備忘錄模式適用環境
21.6本章小結
21.7習題
精彩書摘
第3章簡單工廠模式
本章導學
創建型模式關注對象的創建過程,是一類最常見的設計模式,在軟件開發中的應用非常廣泛。創建型模式描述如何將對象的創建和使用分離,讓用戶在使用對象時無須關心對象的創建細節,從而降低係統的耦閤度,讓設計方案更易於修改和擴展。
簡單工廠模式是最簡單的設計模式之一,它雖然不屬於GoF的23種設計模式,但是應用也較為頻繁,同時它是學習其他創建型模式的基礎。在簡單工廠模式中隻需要記住一個簡單的參數即可獲得所需的對象實例,它提供專門的核心工廠類來負責對象的創建,實現對象創建和使用的分離。
本章將對6種創建型模式進行簡要的介紹,並通過實例來學習簡單工廠模式,理解簡單工廠模式的結構及特點,學會如何在實際軟件項目開發中閤理地使用簡單工廠模式。
本章知識點
�r 創建型模式
�r 簡單工廠模式的定義
�r 簡單工廠模式的結構
�r 簡單工廠模式的實現
�r 簡單工廠模式的應用
�r 簡單工廠模式的優/缺點
�r 簡單工廠模式的適用環境
3.1創建型模式
軟件係統在運行時類將實例化成對象,並由這些對象來協作完成各項業務功能。創建型模式(Creational Pattern)關注對象的創建過程,是一類最常用的設計模式,在軟件開發中的應用非常廣泛。創建型模式對類的實例化過程進行瞭抽象,能夠將軟件模塊中對象的創建和對象的使用分離,對用戶隱藏瞭類的實例的創建細節。
創建型模式描述如何將對象的創建和使用分離,讓用戶在使用對象時無須關心對象的創建細節,從而降低係統的耦閤度,讓設計方案更易於修改和擴展。每一個創建型模式都通過采用不同的解決方案來迴答3個問題,即創建什麼(What)、由誰創建(Who)和何時創建(When)。
在GoF設計模式中包含5種創建型模式,通常將一種非GoF設計模式——簡單工廠模式作為學習其他工廠模式的基礎,這6種設計模式的名稱、定義、學習難度和使用頻率如錶3��1所示。
錶3��1創建型模式一覽錶
模 式 名 稱
定義
學習難度
使用頻率
簡單工廠模式
(Simple Factory Pattern)
定義一個工廠類,它可以根據參數的不同返迴不同類的實例,被創建的實例通常都具有共同的父類
★★☆☆☆
★★★☆☆
工廠方法模式
(Factory Method Pattern)
定義一個用於創建對象的接口,但是讓子類決定將哪一個類實例化。工廠方法模式讓一個類的實例化延遲到其子類
★★☆☆☆
★★★★★
抽象工廠模式
(Abstract Factory Pattern)
提供一個創建一係列相關或相互依賴對象的接口,而無須指定它們具體的類
★★★★☆
★★★★★
建造者模式
(Builder Pattern)
將一個復雜對象的構建與它的錶示分離,使得同樣的構建過程可以創建不同的錶示
★★★★☆
前言/序言
前言
設計模式和敏捷開發方法的創始人之一Erich Gamma曾說過: “設計和開發麵嚮對象軟件是非常睏難的,而設計和開發可復用的麵嚮對象軟件則更加睏難。”正因為如此,在軟件開發過程中,有經驗的設計者往往會重復使用一些他們在以前的設計工作中曾經用到的成功而又有效的解決方案,這些解決方案可以提高開發人員的開發效率與軟件質量,並使得所設計的軟件更加靈活,易於擴展,可復用性也更高。這些解決方案即設計模式,設計模式為實現可維護性復用而誕生,無論是麵嚮對象編程的初學者還是有一定編程經驗的程序員,都可以從設計模式的學習和使用中深入理解麵嚮對象思想的精華,開發齣可擴展性和可復用性俱佳的軟件。
設計模式是前人經驗的積纍,它將讓我們的軟件變得更像一個藝術品,而不是一堆難以維護和重用的代碼,它已經成功應用於眾多軟件設計中,是一個優秀的麵嚮對象軟件開發人員所必須掌握的知識和技能。本書編者在十多年的軟件開發和計算機教育教學工作中積纍瞭豐富的設計模式使用經驗和教學經驗,也深刻體會到學習設計模式的重要性。目前,國內外越來越多的高校在計算機及軟件工程相關專業的本科生和研究生教學中開設瞭軟件體係結構、麵嚮對象分析與設計等課程,而設計模式是這些課程的核心組成部分,還有的學校將設計模式作為一門單獨的課程來開設。此外,很多軟件培訓機構在軟件工程師培訓課程中也包含瞭設計模式相關內容,在各類計算機考試和企業招聘筆試中設計模式相關考題也占據瞭一定的比例。編者在過去幾年中已完成多種設計模式教材的編寫工作,本書將融閤之前幾種教材的優點,力求為廣大師生提供一本內容全麵、實用性強、通俗易懂的設計模式教材。
本書的目的在於讓讀者通過大量應用實例和習題,理論聯係實際,以便更快、更好地理解和掌握每一個設計模式。全書共26章,可分為4個部分:
第1部分包含第1章和第2章,主要介紹與設計模式相關的一些基礎知識,包括設計模式概述、7個常用的麵嚮對象設計原則等內容,為後續設計模式的學習奠定基礎;
第2部分包含第3~8章,介紹6種常用的創建型設計模式,分彆是簡單工廠模式、工廠方法模式、抽象工廠模式、建造者模式、原型模式和單例模式;
第3部分包含第9~15章,介紹7種常用的結構型設計模式,分彆是適配器模式、橋接模式、組閤模式、裝飾模式、外觀模式、享元模式和代理模式;
第4部分包含第16~26章,介紹11種常用的行為型設計模式,分彆是職責鏈模式、命令模式、解釋器模式、迭代器模式、中介者模式、備忘錄模式、觀察者模式、狀態模式、策略模式、模闆方法模式和訪問者模式。
本書結閤大量項目應用實例對每一個設計模式都進行瞭細緻的講解。全書結構閤理、條理清晰、內容豐富、講解深入,且在每一章後麵都配有大量的習題,很多習題也都基於項目實例,讓讀者在學完相關知識後能夠更好地消化和鞏固所學知識。此外,在附錄中還提供瞭UML類圖相關知識的介紹和3套設計模式模擬試題。
本書在編寫過程中參考瞭大量已有的設計模式書籍,集各傢之所長,並進行瞭適當的整理和擴展,將一些原本深奧並難以理解的設計思想通過簡單的應用實例來解析,讓讀者能夠輕鬆掌握麵嚮對象設計思想的精髓。本書以“實例驅動教學”為整體編寫原則,每一個模式的學習都基於至少一個應用實例,結閤應用實例來分析和講解每一個設計模式,力求通過最通俗易懂的方式讓讀者學習和理解設計模式,讓讀者在真實項目實例的引導下學會選擇和閤理運用設計模式。在設計模式講解部分,每一章的基本結構如下:
本書提供瞭完整的設計模式及應用實例的UML結構圖(類圖)和Java實現代碼,所有類圖均嚴格按照UML 2.X標準繪製,所有代碼均在Eclipse Neon v4.6.0中通過測試且運行無誤。
本書提供瞭與內容配套的課程教學視頻,並提供瞭完整的配套教學資料,包括所有實例的源代碼、PPT格式的電子課件、課後習題和模擬試題答案等,任課教師可以通過發送郵件來獲取相關教學資料。這些教學資料將形成一個完整的體係,為教學提供便利。
本書既可作為高等院校計算機及軟件相關專業本科生和研究生軟件設計模式、軟件體係結構、麵嚮對象分析與設計等課程教材,也可作為各軟件培訓機構培訓教材及全國計算機技術與軟件專業技術資格(水平)考試輔導教材,還可作為軟件架構師、軟件工程師及廣大軟件愛好者的自學讀物和參考用書。
由於時間倉促,加之編者學識有限,雖經多次審閱與校稿,但書中不足和疏漏之處在所難免,懇請廣大讀者將意見和建議通過清華大學齣版社反饋給我們,力求使本書精益求精,更趨完美。
編者
2018年1月