圖解設計模式 高清原文 PDF 下載
阿新 • • 發佈:2021-12-24
獲取方式: https://pan.baidu.com/s/1S3jRtSGKvDVHDPP0QjApog 提取碼: p3wn
本書以淺顯易懂的語言逐一說明了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