關(guān)于我們
書單推薦
新書推薦
|
圖解設(shè)計(jì)模式
本書以淺顯易懂的語言逐一說明了GoF的23種設(shè)計(jì)模式。在講解過程中,不僅搭配了豐富的圖片,而且理論結(jié)合實(shí)例,用Java語言編寫代碼實(shí)現(xiàn)了設(shè)計(jì)模式的程序,讓程序真正地運(yùn)行起來,并提供了運(yùn)用模式解決具體問題的練習(xí)題和答案。除此以外,本書在必要時(shí)還對(duì)Java語言的功能進(jìn)行補(bǔ)充說明,以加深讀者對(duì)Java的理解。
原版連續(xù)暢銷12年、重印25次!
194張圖表 + Java示例代碼 = 輕松理解GoF的23種設(shè)計(jì)模式 《程序員的數(shù)學(xué)》《數(shù)學(xué)女孩》作者結(jié)城浩又一力作 1.圖文并茂 194張圖表(包括57張UML類圖)穿插文中,幫助理解各設(shè)計(jì)模式 2.通俗易懂 用淺顯的語言逐一講解23種設(shè)計(jì)模式,讀完此書會(huì)發(fā)現(xiàn)GoF書不再晦澀難懂 3.專業(yè)實(shí)用 編寫了Java程序代碼來實(shí)現(xiàn)設(shè)計(jì)模式,每章附帶練習(xí)題和答案,用以熟練掌握設(shè)計(jì) 模式 4.拓展進(jìn)階 必要時(shí)對(duì)Java語言的功能進(jìn)行了補(bǔ)充說明,可加深對(duì)Java的理解。此外,如果了解C++語言,同樣可以輕松理解本書內(nèi)容 本書適合以下讀者閱讀 a.對(duì)面向?qū)ο箝_發(fā)感興趣的人 b.對(duì)設(shè)計(jì)模式感興趣的人(特別是閱讀了GoF書但是覺得難以理解的人) c.所有Java程序員(特別是對(duì)抽象類和接口的理解不充分的人)
結(jié)城浩(作者),生于1963年,日本杰出技術(shù)作家和程序員。在編程語言、設(shè)計(jì)模式、數(shù)學(xué)、加密技術(shù)等領(lǐng)域,編寫了很多深受歡迎的入門書。代表作有《數(shù)學(xué)女孩》系列、《程序員的數(shù)學(xué)》、《圖解密碼技術(shù)》等。
楊文軒(譯者),華中科技大學(xué)碩士,擅長(zhǎng)Web 2.0開發(fā),有豐富的對(duì)日開發(fā)經(jīng)驗(yàn),F(xiàn)就職于日本方正股份有限公司。譯作有《圖解基礎(chǔ)設(shè)施設(shè)計(jì)模式》《C現(xiàn)代編程:集成開發(fā)環(huán)境、設(shè)計(jì)模式、極限編程、測(cè)試驅(qū)動(dòng)開發(fā)、重構(gòu)、持續(xù)集成》
第1部分 適應(yīng)設(shè)計(jì)模式 1
第1章 Iterator模式——一個(gè)一個(gè)遍歷 1 1.1 Iterator模式 2 1.2 示例程序 2 Aggregate接口 3 Iterator接口 5 Book類 5 BookShelf類 5 BookShelfIteraotr類 6 Main類 7 1.3 Iterator模式中的登場(chǎng)角色 8 1.4 拓展思路的要點(diǎn) 9 不管實(shí)現(xiàn)如何變化,都可以使用Iterator 9 難以理解抽象類和接口 9 Aggregate和Iterator的對(duì)應(yīng) 9 容易弄錯(cuò)“下一個(gè)” 10 還容易弄錯(cuò) “最后一個(gè)” 10 多個(gè)Iterator 10 迭代器的種類多種多樣 10 不需要deleteIterator 10 1.5 相關(guān)的設(shè)計(jì)模式 11 1.6 本章所學(xué)知識(shí) 11 1.7 練習(xí)題 11 第2章 Adapter模式——加個(gè)“適配器”以便于復(fù)用 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模式中的登場(chǎng)角色 18 2.5 拓展思路的要點(diǎn) 19 什么時(shí)候使用Adapter模式 19 如果沒有現(xiàn)成的代碼 20 版本升級(jí)與兼容性 20 功能完全不同的類 20 2.6 相關(guān)的設(shè)計(jì)模式 20 2.7 本章所學(xué)知識(shí) 21 2.8 練習(xí)題 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模式中的登場(chǎng)角色 28 3.4 拓展思路的要點(diǎn) 29 可以使邏輯處理通用化 29 父類與子類之間的協(xié)作 29 父類與子類的一致性 29 3.5 相關(guān)的設(shè)計(jì)模式 30 3.6 延伸閱讀:類的層次與抽象類 30 父類對(duì)子類的要求 30 抽象類的意義 30 父類與子類之間的協(xié)作 31 3.7 本章所學(xué)知識(shí) 31 3.8 練習(xí)題 31 第4章 Factory Method模式——將實(shí)例的生成交給子類 33 4.1 Factory Method模式 34 4.2 示例程序 34 Product類 35 Factory類 35 IDCard類 36 IDCardFactory類 36 Main類 37 4.3 Factory Method模式中的登場(chǎng)角色 37 4.4 拓展思路的要點(diǎn) 39 框架與具體加工 39 生成實(shí)例——方法的三種實(shí)現(xiàn)方式 39 使用模式與開發(fā)人員之間的溝通 40 4.5 相關(guān)的設(shè)計(jì)模式 40 4.6 本章所學(xué)知識(shí) 41 4.7 練習(xí)題 41 第3部分 生成實(shí)例 43 第5章 Singleton模式——只有一個(gè)實(shí)例 43 5.1 Singleton模式 44 5.2 示例程序 44 Singleton類 44 Main類 45 5.3 Singleton模式中的登場(chǎng)角色 46 5.4 拓展思路的要點(diǎn) 46 為什么必須設(shè)置限制 46 何時(shí)生成這個(gè)唯一的實(shí)例 46 5.5 相關(guān)的設(shè)計(jì)模式 47 5.6 本章所學(xué)知識(shí) 47 5.7 練習(xí)題 47 第6章 Prototype模式——通過復(fù)制生成實(shí)例 49 6.1 Prototype模式 50 6.2 示例程序 50 Product接口 51 Manager類 52 MessageBox類 52 UnderlinePen類 53 Main類 54 6.3 Prototype模式中的登場(chǎng)角色 55 6.4 拓展思路的要點(diǎn) 56 不能根據(jù)類來生成實(shí)例嗎 56 類名是束縛嗎 56 6.5 相關(guān)的設(shè)計(jì)模式 57 6.6 延伸閱讀:clone方法和java.lang.Clonable接口 57 Java語言的clone 57 clone方法是在哪里定義的 58 需要實(shí)現(xiàn)Cloneable的哪些方法 58 clone方法進(jìn)行的是淺復(fù)制 58 6.7 本章所學(xué)知識(shí) 58 6.8 練習(xí)題 59 第7章 Builder模式——組裝復(fù)雜的實(shí)例 61 7.1 Builder模式 62 7.2 示例程序 62 Builder類 63 Director類 63 TextBuilder類 64 HTMLBuilder類 65 Main類 65 7.3 Builder模式中的登場(chǎng)角色 67 7.4 相關(guān)的設(shè)計(jì)模式 69 7.5 拓展思路的要點(diǎn) 69 誰知道什么 69 設(shè)計(jì)時(shí)能夠決定的事情和不能決定的事情 70 代碼的閱讀方法和修改方法 70 7.6 本章所學(xué)知識(shí) 70 7.7 練習(xí)題 70 第8章 Abstract Factory模式——將關(guān)聯(lián)零件組裝成產(chǎn)品 73 8.1 Abstract Factory模式 74 8.2 示例程序 74 抽象的零件:Item類 77 抽象的零件:Link類 78 抽象的零件:Tray類 78 抽象的產(chǎn)品:Page類 79 抽象的工廠:Factory類 79 使用工廠將零件組裝稱為產(chǎn)品:Main類 80 具體的工廠:ListFactory類 81 具體的零件:ListLink類 82 具體的零件:ListTray類 82 具體的產(chǎn)品:ListPage類 83 8.3 為示例程序增加其他工廠 84 具體的工廠:TableFactory類 85 具體的零件:TableLink類 86 具體的零件:TableTray類 86 具體的產(chǎn)品:TablePage類 87 8.4 Abstract Factory模式中的登場(chǎng)角色 87 8.5 拓展思路的要點(diǎn) 89 易于增加具體的工廠 89 難以增加新的零件 89 8.6 相關(guān)的設(shè)計(jì)模式 89 8.7 延伸閱讀:各種生成實(shí)例的方法的介紹 90 8.8 本章所學(xué)知識(shí) 91 8.9 練習(xí)題 91 第4部分 分開考慮 93 第9章 Bridge模式——將類的功能層次結(jié)構(gòu)與實(shí)現(xiàn)層次結(jié)構(gòu)分離 93 9.1 Bridge模式 94 9.2 示例程序 95 類的功能層次結(jié)構(gòu):Display類 96 類的功能層次結(jié)構(gòu):CountDisplay類 97 類的實(shí)現(xiàn)層次結(jié)構(gòu):DisplayImpl類 97 類的實(shí)現(xiàn)層次結(jié)構(gòu):StringDisplayImpl類 98 Main類 98 9.3 Bridge模式中的登場(chǎng)角色 99 9.4 拓展思路的要點(diǎn) 100 分開后更容易擴(kuò)展 100 繼承是強(qiáng)關(guān)聯(lián),委托是弱關(guān)聯(lián) 100 9.5 相關(guān)的設(shè)計(jì)模式 101 9.6 本章所學(xué)知識(shí) 101 9.7 練習(xí)題 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模式中的登場(chǎng)角色 111 10.4 拓展思路的要點(diǎn) 112 為什么需要特意編寫Strategy角色 112 程序運(yùn)行中也可以切換策略 112 10.5 相關(guān)的設(shè)計(jì)模式 113 10.6 本章所學(xué)知識(shí) 113 10.7 練習(xí)題 113 第5部分 一致性 117 第11章 Composite模式——容器與內(nèi)容的一致性 117 11.1 Composite模式 118 11.2 示例程序 118 Entry類 119 File類 120 Directory類 121 FileTreatMentException類 122 Main類 122 11.3 Composite模式中的登場(chǎng)角色 124 11.4 拓展思路的要點(diǎn) 125 多個(gè)和單個(gè)的一致性 125 Add方法應(yīng)該放在哪里 126 到處都存在遞歸結(jié)構(gòu) 126 11.5 相關(guān)的設(shè)計(jì)模式 126 11.6 本章所學(xué)知識(shí) 127 11.7 練習(xí)題 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模式中的登場(chǎng)角色 136 12.4 拓展思路的要點(diǎn) 137 接口(API)的透明性 137 在不改變被裝飾物的前提下增加功能 138 可以動(dòng)態(tài)地增加功能 138 只需要一些裝飾物即可添加許多功能 138 java.io包與Decorator模式 138 導(dǎo)致增加許多很小的類 139 12.5 相關(guān)的設(shè)計(jì)模式 139 12.6 延伸閱讀:繼承和委托中的一致性 140 繼承——父類和子類的一致性 140 委托——自己和被委托對(duì)象的一致性 140 12.7 本章所學(xué)知識(shí) 142 12.8 練習(xí)題 142 第6部分 訪問數(shù)據(jù)結(jié)構(gòu) 145 第13章 Visitor模式——訪問數(shù)據(jù)結(jié)構(gòu)并處理數(shù)據(jù) 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之間的相互調(diào)用 152 13.3 Visitor模式中的登場(chǎng)角色 154 13.4 拓展思路的要點(diǎn) 155 雙重分發(fā) 155 為什么要弄得這么復(fù)雜 155 開閉原則——對(duì)擴(kuò)展開放,對(duì)修改關(guān)閉 155 易于增加ConcreteVisitor角色 156 難以增加ConcreteElement角色 156 Visitor工作所需的條件 156 13.5 相關(guān)的設(shè)計(jì)模式 157 13.6 本章所學(xué)知識(shí) 157 13.7 練習(xí)題 157 第14章 Chain of Responsibility模式——推卸責(zé)任 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模式中的登場(chǎng)角色 167 14.4 拓展思路的要點(diǎn) 168 弱化了發(fā)出請(qǐng)求的人和處理請(qǐng)求的人之間的關(guān)系 168 可以動(dòng)態(tài)地改變職責(zé)鏈 168 專注于自己的工作 169 推卸請(qǐng)求會(huì)導(dǎo)致處理延遲嗎 169 14.5 相關(guān)的設(shè)計(jì)模式 169 14.6 本章所學(xué)知識(shí) 169 14.7 練習(xí)題 169 第7部分 簡(jiǎn)單化 171 第15章 Facade模式——簡(jiǎn)單窗口 171 15.1 Facade模式 172 15.2 示例程序 172 Database類 173 HtmlWriter類 174 PageMaker類 175 Main類 176 15.3 Facade模式中的登場(chǎng)角色 176 15.4 拓展思路的要點(diǎn) 177 Facade角色到底做什么工作 177 遞歸地使用Facade模式 178 開發(fā)人員不愿意創(chuàng)建Facade角色的原因——心理原因 178 15.5 相關(guān)的設(shè)計(jì)模式 178 15.6 本章所學(xué)知識(shí) 178 15.7 練習(xí)題 179 第16章 Mediator模式——只有一個(gè)仲裁者 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模式中的登場(chǎng)角色 191 16.4 拓展思路的要點(diǎn) 192 當(dāng)發(fā)生分散災(zāi)難時(shí) 192 通信線路的增加 193 哪些角色可以復(fù)用 193 16.5 相關(guān)的設(shè)計(jì)模式 193 16.6 本章所學(xué)知識(shí) 193 16.7 練習(xí)題 194 第8部分 管理狀態(tài) 195 第17章 Observer模式——發(fā)送狀態(tài)變化通知 195 17.1 Observer模式 196 17.2 示例程序 196 Observer接口 196 NumberGenerator類 197 RandomNumberGenerator類 198 DigitObserver類 198 GraphObserver類 199 Main類 199 17.3 Observer模式中的登場(chǎng)角色 200 17.4 拓展思路的要點(diǎn) 201 這里也出現(xiàn)了可替換性 201 Observer的順序 202 當(dāng)Observer的行為會(huì)對(duì)Subject產(chǎn)生影響時(shí) 202 傳遞更新信息的方式 202 從“觀察”變?yōu)椤巴ㄖ薄?03 Model/View/Controller(MVC) 203 17.5 延伸閱讀:java.util.Observer接口 203 17.6 相關(guān)的設(shè)計(jì)模式 204 17.7 本章所學(xué)知識(shí) 204 17.8 練習(xí)題 204 第18章 Memento模式——保存對(duì)象狀態(tài) 207 18.1 Memento模式 208 18.2 示例程序 208 Memento類 209 Gamer類 210 Main類 211 18.3 Memento模式中的登場(chǎng)角色 215 18.4 拓展思路的要點(diǎn) 216 兩種接口(API)和可見性 216 需要多少個(gè)Memento 217 Memento的有效期限是多久 217 劃分Caretaker角色和Originator角色的意義 217 18.5 相關(guān)的設(shè)計(jì)模式 218 18.6 本章所學(xué)知識(shí) 218 18.7 練習(xí)題 218 第19章 State模式——用類表示狀態(tài) 221 19.1 State模式 222 19.2 示例程序 222 金庫警報(bào)系統(tǒng) 222 不使用State模式的偽代碼 223 使用了State模式的偽代碼 224 State接口 226 DayState類 226 NightState類 227 Context接口 228 SafeFrame類 228 Main類 231 19.3 State模式中的登場(chǎng)角色 232 19.4 拓展思路的要點(diǎn) 233 分而治之 233 依賴于狀態(tài)的處理 233 應(yīng)當(dāng)是誰來管理狀態(tài)遷移 233 不會(huì)自相矛盾 234 易于增加新的狀態(tài) 234 實(shí)例的多面性 235 19.5 相關(guān)的設(shè)計(jì)模式 235 19.6 本章所學(xué)知識(shí) 235 19.7 練習(xí)題 236 第9部分 避免浪費(fèi) 237 第20章 Flyweight模式——共享對(duì)象,避免浪費(fèi) 237 20.1 Flyweight模式 238 20.2 示例程序 238 BigChar類 240 BigCharFactory類 241 BigString類 242 Main類 244 20.3 Flyweight模式中的登場(chǎng)角色 244 20.4 拓展思路的要點(diǎn) 245 對(duì)多個(gè)地方產(chǎn)生影響 245 Intrinsic與Extrinsic 246 不要讓被共享的實(shí)例被垃圾回收器回收了 246 內(nèi)存之外的其他資源 247 20.5 相關(guān)的設(shè)計(jì)模式 247 20.6 本章所學(xué)知識(shí) 247 20.7 練習(xí)題 247 第21章 Proxy模式——只在必要時(shí)生成實(shí)例 249 21.1 Proxy模式 250 21.2 示例程序 250 Printer類 251 Printable接口 252 PrinterProxy類 253 Main類 254 21.3 Proxy模式中的登場(chǎng)角色 254 21.4 拓展思路的要點(diǎn) 255 使用代理人來提升處理速度 255 有必要?jiǎng)澐执砣撕捅救藛帷?56 代理與委托 256 透明性 256 HTTP代理 256 各種Proxy模式 257 21.5 相關(guān)的設(shè)計(jì)模式 257 21.6 本章所學(xué)知識(shí) 257 21.7 練習(xí)題 257 第10部分 用類來表現(xiàn) 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模式中的登場(chǎng)角色 268 22.4 拓展思路的要點(diǎn) 269 命令中應(yīng)該包含哪些信息 269 保存歷史記錄 269 適配器 269 22.5 相關(guān)的設(shè)計(jì)模式 271 22.6 本章所學(xué)知識(shí) 272 22.7 練習(xí)題 272 第23章 Interpreter模式——語法規(guī)則也是類 273 23.1 Interpreter模式 274 23.2 迷你語言 274 迷你語言的命令 274 迷你語言程序示例 275 迷你語言的語法 278 終結(jié)符表達(dá)式與非終結(jié)符表達(dá)式 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模式中的登場(chǎng)角色 288 23.5 拓展思路的要點(diǎn) 289 還有其他哪些迷你語言 289 跳過標(biāo)記還是讀取標(biāo)記 290 23.6 相關(guān)的設(shè)計(jì)模式 290 23.7 本章所學(xué)知識(shí)以及本書的結(jié)束語 290 23.8 練習(xí)題 290 附 錄 293 附錄A 習(xí)題解答 294 附錄B 示例程序的運(yùn)行步驟 359 附錄C GoF對(duì)設(shè)計(jì)模式的分類 361 附錄D 設(shè)計(jì)模式Q&A 362 附錄E 參考書籍 365
你還可能感興趣
我要評(píng)論
|