圖解設計模式

圖解設計模式

作者: 結城浩
出版社: 人民郵電
出版在: 2017-01-01
ISBN-13: 9787115439499
ISBN-10: 7115439494
裝訂格式: 平裝
總頁數: 366 頁





內容描述


<內容簡介>
本書以淺顯易懂的語言逐一說明瞭GoF的23種設計模式。在講解過程中,不僅搭配了豐富的圖片,而且理論結合實例,用Java語言編寫代碼實現了設計模式的程序,讓程序真正地運行起來,並提供了運用模式解決具體問題的練習題和答案。除此以外,本書在必要時還對Java語言的功能進行補充說明,以加深讀者對Java的理解。

<章節目錄>
第1部分適應設計模式1 第1章Iterator模式——一個一個遍歷1 1.1 Iterator模式2 1.2示例程序2 Aggregate接口3 Iterator接口5 Book類5 BookShelf類5 BookShelfIteraotr類6 Main類7 1.3 Iterator模式中的登場角色8 1.4拓展思路的要點9 不管實現如何變化,都可以使用Iterator 9 難以理解抽像類和接口9 Aggregate和Iterator的對應9 容易弄錯“下一個” 10 還容易弄錯“最後一個” 10 多個Iterator 10 迭代器的種類多種多樣10 不需要deleteIterator 10 1.5相關的設計模式11 1.6本章所學知識11 1.7練習題11 第2章Adapter模式——加個“適配器”以便於復用13 2.1 Adapter模式14 2.2示例程序(1)(使用繼承的適配器) 14 Banner類15 Print接口16 PrintBanner類16 Main類16 2.3示例程序(2)(使用委託的示例程序) 17 Print類18 PrintBanner類18 2.4 Adapter模式中的登場角色18 2.5拓展思路的要點19 什麼時候使用Adapter模式19 如果沒有現成的代碼20 版本升級與兼容性20 功能完全不同的類20 2.6相關的設計模式20 2.7本章所學知識21 2.8練習題21 第2部分交給子類23 第3章Template Method模式——將具體處理交給子類23 3.1 Template Method模式24 什麼是模板24 什麼是Template Method模式24 3.2示例程序24 AbstractDisplay類25 CharDisplay類26 StringDisplay類27 Main類28 3.3 Template Method模式中的登場角色28 3.4拓展思路的要點29 可以使邏輯處理通用化29 父類與子類之間的協作29 父類與子類的一致性29 3.5相關的設計模式30 3.6延伸閱讀:類的層次與抽像類30 父類對子類的要求30 抽像類的意義30 父類與子類之間的協作31 3.7本章所學知識31 3.8練習題31 第4章Factory Method模式——將實例的生成交給子類33 4.1 Factory Method模式34 4.2示例程序34 Product類35 Factory類35 IDCard類36 IDCardFactory類36 Main類37 4.3 Factory Method模式中的登場角色37 4.4拓展思路的要點39 框架與具體加工39 生成實例——方法的三種實現方式39 使用模式與開發人員之間的溝通40 4.5相關的設計模式40 4.6本章所學知識41 4.7練習題41 第3部分生成實例43 第5章Singleton模式——只有一個實例43 5.1 Singleton模式44 5.2示例程序44 Singleton類44 Main類45 5.3 Singleton模式中的登場角色46 5.4拓展思路的要點46 為什麼必須設置限制46 何時生成這個唯一的實例46 5.5相關的設計模式47 5.6本章所學知識47 5.7練習題47 第6章Prototype模式——通過複製生成實例49 6.1 Prototype模式50 6.2示例程序50 Product接口51 Manager類52 MessageBox類52 UnderlinePen類53 Main類54 6.3 Prototype模式中的登場角色55 6.4拓展思路的要點56 不能根據類來生成實例嗎56 類名是束縛嗎56 6.5相關的設計模式57 6.6延伸閱讀:clone方法和java.lang.Clonable接口57 Java語言的clone 57 clone方法是在哪裡定義的58 需要實現Cloneable的哪些方法58 clone方法進行的是淺複製58 6.7本章所學知識58 6.8練習題59 第7章Builder模式——組裝複雜的實例61 7.1 Builder模式62 7.2示例程序62 Builder類63 Director類63 TextBuilder類64 HTMLBuilder類65 Main類65 7.3 Builder模式中的登場角色67 7.4相關的設計模式69 7.5拓展思路的要點69 誰知道什麼69 設計時能夠決定的事情和不能決定的事情70 代碼的閱讀方法和修改方法70 7.6本章所學知識70 7.7練習題70 第8章Abstract Factory模式——將關聯零件組裝成產品73 8.1 Abstract Factory模式74 8.2示例程序74 抽象的零件:Item類77 抽象的零件:Link類78 抽象的零件:Tray類78 抽象的產品:Page類79 抽象的工廠:Factory類79 使用工廠將零件組裝稱為產品:Main類80 具體的工廠:ListFactory類81 具體的零件:ListLink類82 具體的零件:ListTray類82 具體的產品:ListPage類83 8.3為示例程序增加其他工廠84 具體的工廠:TableFactory類85 具體的零件:TableLink類86 具體的零件:TableTray類86 具體的產品:TablePage類87 8.4 Abstract Factory模式中的登場角色87 8.5拓展思路的要點89 易於增加具體的工廠89 難以增加新的零件89 8.6相關的設計模式89 8.7延伸閱讀:各種生成實例的方法的介紹90 8.8本章所學知識91 8.9練習題91 第4部分分開考慮93 第9章Bridge模式——將類的功能層次結構與實現層次結構分離93 9.1 Bridge模式94 9.2示例程序95 類的功能層次結構:Display類96 類的功能層次結構:CountDisplay類97 類的實現層次結構:DisplayImpl類97 類的實現層次結構:StringDisplayImpl類98 Main類98 9.3 Bridge模式中的登場角色99 9.4拓展思路的要點100 分開後更容易擴展100 繼承是強關聯,委託是弱關聯100 9.5相關的設計模式101 9.6本章所學知識101 9.7練習題102 第10章Strategy模式——整體地替換算法103 10.1 Strategy模式104 10.2示例程序104 Hand類105 Strategy接口106 WinningStrategy類106 ProbStrategy類107 Player類109 Main類109 10.3 Strategy模式中的登場角色111 10.4拓展思路的要點112 為什麼需要特意編寫Strategy角色112 程序運行中也可以切換策略112 10.5相關的設計模式113 10.6本章所學知識113 10.7練習題113 第5部分一致性117 第11章Composite模式——容器與內容的一致性117 11.1 Composite模式118 11.2示例程序118 Entry類119 File類120 Directory類121 FileTreatMentException類122 Main類122 11.3 Composite模式中的登場角色124 11.4拓展思路的要點125 多個和單個的一致性125 Add方法應該放在哪裡126 到處都存在遞歸結構126 11.5相關的設計模式126 11.6本章所學知識127 11.7練習題127 第12章Decorator模式——裝飾邊框與被裝飾物的一致性129 12.1 Decorator模式130 12.2示例程序130 Display類131 StringDisplay類132 Border類132 SideBorder類133 FullBorder類134 Main類135 12.3 Decorator模式中的登場角色136 12.4拓展思路的要點137 接口(API)的透明性137 在不改變被裝飾物的前提下增加功能138 可以動態地增加功能138 只需要一些裝飾物即可添加許多功能138 java.io包與Decorator模式138 導致增加許多很小的類139 12.5相關的設計模式139 12.6延伸閱讀:繼承和委託中的一致性140 繼承——父類和子類的一致性140 委託——自己和被委託對象的一致性140 12.7本章所學知識142 12.8練習題142 第6部分訪問數據結構145 第13章Visitor模式——訪問數據結構並處理數據145 13.1 Visitor模式146 13.2示例程序146 Visitor類147 Element接口148 Entry類148 File類148 Directory類149 ListVisitor類150 FileTreatmentException類151 Main類151 Visitor與Element之間的相互調用152 13.3 Visitor模式中的登場角色154 13.4拓展思路的要點155 雙重分發155 為什麼要弄得這麼複雜155 開閉原則——對擴展開放,對修改關閉155 易於增加ConcreteVisitor角色156 難以增加ConcreteElement角色156 Visitor工作所需的條件156 13.5相關的設計模式157 13.6本章所學知識157 13.7練習題157 第14章Chain of Responsibility模式——推卸責任161 14.1 Chain of Responsibility模式162 14.2示例程序162 Trouble類163 Support類163 NoSupport類164 LimitSupport類164 OddSupport類165 SpecialSupport類165 Main類166 14.3 Chain of Responsibility模式中的登場角色167 14.4拓展思路的要點168 弱化了發出請求的人和處理請求的人之間的關係168 可以動態地改變職責鏈168 專註於自己的工作169 推卸請求會導致處理延遲嗎169 14.5相關的設計模式169 14.6本章所學知識169 14.7練習題169 第7部分簡單化171 第15章Facade模式——簡單窗口171 15.1 Facade模式172 15.2示例程序172 Database類173 HtmlWriter類174 PageMaker類175 Main類176 15.3 Facade模式中的登場角色176 15.4拓展思路的要點177 Facade角色到底做什麼工作177 遞歸地使用Facade模式178 開發人員不願意創建Facade角色的原因——心理原因178 15.5相關的設計模式178 15.6本章所學知識178 15.7練習題179 第16章Mediator模式——只有一個仲裁者181 16.1 Mediator模式182 16.2示例程序182 Mediator接口185 Colleague接口186 ColleagueButton類186 ColleagueTextField類187 ColleagueCheckbox類188 LoginFrame類188 Main類191 16.3 Mediator模式中的登場角色191 16.4拓展思路的要點192 當發生分散災難時192 通信線路的增加193 哪些角色可以復用193 16.5相關的設計模式193 16.6本章所學知識193 16.7練習題194 第8部分管理狀態195 第17章Observer模式——發送狀態變化通知195 17.1 Observer模式196 17.2示例程序196 Observer接口196 NumberGenerator類197 RandomNumberGenerator類198 DigitObserver類198 GraphObserver類199 Main類199 17.3 Observer模式中的登場角色200 17.4拓展思路的要點201 這裡也出現了可替換性201 Observer的順序202 當Observer的行為會對Subject產生影響時202 傳遞更新信息的方式202 從“觀察”變為“通知” 203 Model /View/Controller(MVC) 203 17.5延伸閱讀:java.util.Observer接口203 17.6相關的設計模式204 17.7本章所學知識204 17.8練習題204 第18章Memento模式——保存對象狀態207 18.1 Memento模式208 18.2示例程序208 Memento類209 Gamer類210 Main類211 18.3 Memento模式中的登場角色215 18.4拓展思路的要點216 兩種接口(API)和可見性216 需要多少個Memento 217 Memento的有效期限是多久217 劃分Caretaker角色和Originator角色的意義217 18.5相關的設計模式218 18.6本章所學知識218 18.7練習題218 第19章State模式——用類表示狀態221 19.1 State模式222 19.2示例程序222 金庫警報系統222 不使用State模式的偽代碼223 使用了State模式的偽代碼224 State接口226 DayState類226 NightState類227 Context接口228 SafeFrame類228 Main類231 19.3 State模式中的登場角色232 19.4拓展思路的要點233 分而治之233 依賴於狀態的處理233 應當是誰來管理狀態遷移233 不會自相矛盾234 易於增加新的狀態234 實例的多面性235 19.5相關的設計模式235 19.6本章所學知識235 19.7練習題236 第9部分避免浪費237 第20章Flyweight模式——共享對象,避免浪費237 20.1 Flyweight模式238 20.2示例程序238 BigChar類240 BigCharFactory類241 BigString類242 Main類244 20.3 Flyweight模式中的登場角色244 20.4拓展思路的要點245 對多個地方產生影響245 Intrinsic與Extrinsic 246 不要讓被共享的實例被垃圾回收器回收了246 內存之外的其他資源247 20.5相關的設計模式247 20.6本章所學知識247 20.7練習題247 第21章Proxy模式——只在必要時生成實例249 21.1 Proxy模式250 21.2示例程序250 Printer類251 Printable接口252 PrinterProxy類253 Main類254 21.3 Proxy模式中的登場角色254 21.4拓展思路的要點255 使用代理人來提升處理速度255 有必要劃分代理人和本人嗎256 代理與委託256 透明性256 HTTP代理256 各種Proxy模式257 21.5相關的設計模式257 21.6本章所學知識257 21.7練習題257 第10部分用類來表現259 第22章Command模式——命令也是類259 22.1 Command模式260 22.2示例程序260 Command接口261 MacroCommand類262 DrawCommand類263 Drawable接口263 DrawCanvas類264 Main類265 22.3 Command模式中的登場角色268 22.4拓展思路的要點269 命令中應該包含哪些信息269 保存歷史記錄269 適配器269 22.5相關的設計模式271 22.6本章所學知識272 22.7練習題272 第23章Interpreter模式——語法規則也是類273 23.1 Interpreter模式274 23.2迷你語言274 迷你語言的命令274 迷你語言程序示例275 迷你語言的語法278 終結符表達式與非終結符表達式279 23.3示例程序279 Node類281 ProgramNode類281 CommandListNode類282 CommandNode類283 RepeatCommandNode類284 PrimitiveCommandNode類285 Context類285 ParseException類286 Main類287 23.4 Interpreter模式中的登場角色288 23.5拓展思路的要點289 還有其他哪些迷你語言289 跳過標記還是讀取標記290 23.6相關的設計模式290 23.7本章所學知識以及本書的結束語290 23.8練習題290 附錄293 附錄A習題解答294 附錄B示例程序的運行步驟359 附錄C GoF對設計模式的分類361 附錄D設計模式Q&A 362 附錄E參考書籍365




相關書籍

Good Code, Bad Code: Think Like a Software Engineer

作者 Long Tom

2017-01-01

The Great ScrumMaster: #ScrumMasterWay (Paperback)

作者 Zuzana Sochova

2017-01-01

Agile Testing: A Practical Guide for Testers and Agile Teams (Paperback)

作者 Lisa Crispin Janet Gregory

2017-01-01