精通Swift設計模式 精通Swift设计模式

亞當·弗里曼 (Adam Freeman)

買這商品的人也買了...

商品描述

本書是系統學習Swift 設計模式和Cocoa 框架知識的絕佳參考圖書。

書中內容分為五部分:

首部分介紹學習本書的預備知識,包括使用Xcode 創建的Playgroud 文件和名為SportsStore 的iOS 應用

第二部分講解創建型模式,並輔以大量代碼示例和圖示

第三部分闡述結構型模式,並重點區分了容易混淆的模式

第四部分介紹行為型模式,總結了一些知名度較小的模式

第五部分討論MVC 模式,剖析了MVC 模式的重要性

作者簡介

Adam Freeman曾在多家名企擔任高級職務,現為暢銷技術圖書作家,著有多部C#、.NET和Java方面的大部頭作品。其中《ASP.NET 4高級程序設計(第4版)》《精通ASP.NET MVC 3框架(第3版)》《HTML5指南》銷量均在同品種中名列前茅,備受讀者推崇。

目錄大綱

第一部分準備工作

第1章設計模式2 
1.1將設計模式置於上下文中2 
1.1.1設計模式簡介3 
1.1.2設計模式的結構3 
1.1.3量化設計模式4 
1.1.4問題出現之後使用設計模式4 
1.1.5設計模式的局限5 
1.2關於本書5 
1.2.1讀者需要哪些知識背景5 
1.2.2讀者需要哪些軟件5 
1.2.3本書的結構6 
1.2.4獲取示例代碼6 
1.3總結6 

第2章熟悉Xcode的使用7 
2.1使用Xcode Playground7 
2.1.1創建Playground7 
2.1.2查看變量取值的歷史記錄9 
2.1.3使用取值時間軸11 
2.1.4在Playground中使用UI組件13 
2.2使用OSX命令行工具項目14 
2.2.1創建命令行工具項目14 
2.2.2Xcode的佈局15 
2.2.3新建一個Swift文件16 
2.3總結19 

第3章開發SportsStore應用20 
3.1創建一個簡單的iOS應用項目20 
3.1.1新建項目21 
3.1.2熟悉Xcode的佈局22
3.1.3定義數據23 
3.2構建簡單的佈局25 
3.2.1添加基本組件26 
3.2.2配置AutoLayout28 
3.2.3測試佈局效果29 
3.3實現與顯示庫存總量的Label相關的代碼30 
3.3.1創建引用30 
3.3.2更新界面顯示31 
3.4實現tablecell32 
3.4.1配置自定義tablecell和佈局32 
3.4.2配置tablecell的佈局約束34 
3.4.3創建tablecell類和Outlet34 
3.4.4實現數據源協議36 
3.4.5註冊數據源37 
3.4.6測試數據源38 
3.5處理編輯操作38 
3.6測試SportsStore應用41 
3.7總結42 

第二部分創建型模式

第4章對像模板模式44 
4.1準備示例項目44 
4.2此模式旨在解決的問題45 
4.3對像模板模式47 
4.4實現對像模板模式48 
4.5對像模板模式的優點49 
4.5.1解耦的好處49 
4.5.2封裝的優點50 
4.5.3不斷演化外部呈現的好處52 
4.6對像模板模式的陷阱54
4.7Cocoa中使用對像模板模式的示例54 
4.8在SportsStore應用中使用對像模板模式54 
4.8.1準備示例應用54 
4.8.2創建Product類56 
4.8.3使用Product類58 
4.8.4擴展應用的總結信息60 
4.9總結61 

第5章原型模式62 
5.1此模式旨在解決的問題62 
5.1.1初始化過程開銷大62 
5.1.2對模板的依賴64 
5.2原型模式65 
5.3實現原型模式65 
5.3.1克隆引用類型67 
5.3.2淺複製與深複製70 
5.3.3複製數組73 
5.4原型模式的優點75 
5.4.1避免內存開銷大的初始化操作75 
5.4.2分離對象的創建與使用77 
5.5原型模式的陷阱83 
5.5. 1陷阱一:深複製與淺複製83 
5.5.2陷阱二:扭曲代碼結構83 
5.5.3陷阱三:不標準的協議83 
5.6Cocoa中使用原型模式的實例83 
5.6.1使用Cocoa數組84 
5.6.2使用NSCopying屬性修飾符86 
5.7在SportsStore應用中使用原型模式87 
5.7.1準備示例應用87
5.7.2在Product類中實現NSCopying 協議87 
5.7.3創建Logger類88 
5.7.4在View Controller中輸出修改日誌89 
5.7.5測試修改91 
5.8總結91 

第6章單例模式92 
6.1準備示例項目92 
6.2此模式旨在解決的問題92 
6.3單例模式96 
6.4實現單例模式96 
6.4.1快速實現單例模式96 
6.4.2創建一個傳統的單例實現98 
6.4.3處理並發100 
6.5單例模式的陷阱104 
6.5.1洩露缺陷104 
6.5.2代碼文件共享帶來的問題105 
6.5.3並發陷阱105 
6.6Cocoa中使用單例模式的實例106 
6.7在SportsStore應用中使用單例模式106 
6.7.1保護數據數組107 
6.7.2保護回調108 
6.7.3定義單例109 
6.8總結111
 
第7章對像池模式112 
7.1準備示例項目112 
7.2此模式旨在解決的問題113 
7.3對像池模式113 
7.4實現對像池模式114 
7.4.1定義Pool類114
7.4.2使用Pool類118 
7.5對像池模式的陷阱121 
7.6Cocoa中使用對像池模式的實例121 
7.7在SportsStore應用中使用對像池模式122 
7.7.1準備示例應用122 
7.7.2創建一個(偽)服務器122 
7.7.3創建對像池123 
7.7.4應用對像池模式124 
7.8總結127 

第8章對像池模式的變體128 
8.1準備示例項目128 
8.2對像池模式的變體128 
8.2.1對象創建策略129 
8.2 .2對象復用策略132 
8.2.3空池策略136 
8.2.4對象分配策略146 
8.3對像池模式變體的陷阱148 
8.3.1期望與現實之間的差距149 
8.3.2過度利用與低利用率149 
8.4Cocoa中使用對像池模式變體的示例149 
8.5在SportsStore應用中使用對像池模式變體149 
8.6總結151 

第9章工廠方法模式152 
9.1準備示例項目152 
9.2此模式旨在解決的問題154 
9.3工廠方法模式156 
9.4實現工廠方法模式156 
9.4.1定義全局工廠方法157
9.4.2使用基類158 
9.5工廠方法模式的變體162 
9.6工廠方法模式的陷阱164 
9.7Cocoa中使用工廠方法模式的示例164 
9.8在SportsStore應用中使用工廠方法模式164 
9.8.1準備示例應用164 
9.8 .2實現工廠方法模式166 
9.8.3應用工廠方法模式167 
9.9總結168 

第10章抽象工廠模式169 
10.1準備示例項目169 
10.2此模式旨在解決的問題172 
10.3抽象工廠模式172 
10.4實現抽象工廠模式174 
10.4.1創建抽象工廠類174 
10.4.2創建具體工廠類174 
10.4.3完善抽象工廠類175 
10.4.4使用抽象工廠模式176 
10.5抽象工廠模式的變體177 
10.5.1隱藏抽象工廠類177 
10.5. 2在具體工廠類中使用單例模式178 
10.5.3在實現類中使用原型模式180 
10.6抽象工廠模式的陷阱185 
10.7Cocoa中使用抽象工廠模式的示例185 
10.8在SportsStore應用中使用抽象工廠模式186 
10.8 .1準備示例應用186 
10.8.2定義實現類和協議186
10.8.3定義抽象與具體工廠類187 
10.8.4使用工廠與實現類188 
10.9總結189
 
第11章建造者模式190 
11.1準備示例項目190 
11.2建造者模式194 
11.3實現建造者模式195 
11.3.1定義建造者類195 
11.3.2使用建造者類196 
11.3.3此模式的影響196 
11.4建造者模式的變體200 
11.5建造者模式的陷阱202 
11.6Cocoa中使用建造者模式的實例202 
11.7在SportsStore應用中使用建造者模式203 
11.7.1準備示例應用203 
11.7.2定義建造者類203 
11.7.3使用建造者類204 
11.8總結205

第三部分結構型模式

第12章適配器模式208 
12.1準備示例項目208 
12.1.1創建數據源209 
12.1.2實現示例應用210 
12.2此模式旨在解決的問題211 
12.3適配器模式212 
12.4實現適配器模式213 
12.5適配器模式之變體215 
12.5.1定義一個適配器包裝類215 
12.5.2創建一個雙向適配器216
12.6適配器模式的缺陷219 
12.7Cocoa中使用適配器模式的實例219 
12.8在SportsStore應用中使用適配器模式219 
12.8.1準備示例應用220 
12.8.2定義Adapter類220 
12.8.3使用適配功能221 
12.9總結222 

第13章橋接模式223 
13.1準備示例項目223 
13.2此模式旨在解決的問題225 
13.3橋接模式226 
13.4實現橋接模式228 
13.4.1實現信息部分228 
13.4.2實現通道部分229 
13.4.3創建橋接類229 
13.4 .4增加信息類型與通道類型230 
13.5橋接模式的變體233 
13.6橋接模式的陷阱237 
13.7Cocoa中使用橋接模式的實例237 
13.8在SportsStore應用中使用此模式237 
13.8.1準備示例應用237 
13.8.2理解待解決的問題237 
13.8.3定義橋接類238 
13.9總結239 

第14章裝飾器模式240 
14.1準備示例項目240 
14.2此模式旨在解決的問題242 
14.3裝飾器模式244 
14.4實現裝飾器模式244
14.5裝飾器模式的變體246 
14.5.1創建具有新功能的裝飾器246 
14.5.2合併多個裝飾器249 
14.6裝飾器模式的陷阱251 
14.7Cocoa中使用裝飾器模式的實例251 
14.8在示例項目中使用裝飾器模式251 
14.8.1準備示例應用252 
14.8.2創建裝飾器252 
14.8.3使用裝飾器253 
14.9總結253 

第15章組合模式254 
15.1準備示例項目254 
15.2此模式旨在解決的問題256 
15.3組合模式257 
15.4實現組合模式257 
15.5組合模式的陷阱260 
15.6Cocoa中使用組合模式的實例261 
15.7在SportsStore應用中使用此模式261 
15.7.1準備示例應用261 
15.7.2定義組合類262 
15.7.3使用此模式263 
15.8總結264 

第16章外觀模式265 
16.1準備示例項目265 
16.2此模式旨在解決的問題267 
16.3外觀模式268 
16.4實現外觀模式269 
16.5外觀模式之變體270 
16.6外觀模式的陷阱271
16.7Cocoa中使用外觀模式的實例272 
16.8在SportsStore應用中使用外觀模式273 
16.8.1準備示例應用273 
16.8.2創建外觀類274 
16.8.3使用外觀類274 
16.9總結275 

第17章享元模式276 
17.1準備示例項目276 
17.2此模式旨在解決的問題278 
17.3享元模式278 
17.4實現享元模式279 
17.4.1創建Flyweight協議279 
17.4.2創建FlyweightImplementation類280 
17.4.3增加並發保護281 
17.4.4創建FlyweightFactory類282 
17.4.5應用享元模式284 
17.5享元模式之變體285 
17.6享元模式的陷阱286 
17.6.1陷阱一:重複的外部數據286 
17.6.2陷阱二:可變的外部數據287 
17.6.3陷阱三:並發訪問287 
17.6.4陷阱四:過度優化287 
17.6.5陷阱五:誤用287 
17.7Cocoa中使用享元模式的實例287 
17.8在SportsStore應用中使用享元模式288 
17.8.1準備示例應用289
17.8.2創建Flyweight協議和實現類289 
17.8.3創建享元工廠289 
17.8.4應用享元模式290 
17.9總結290 

第18章代理模式291 
18.1準備示例項目291 
18.2此模式旨在解決的問題292 
18.2 .1遠程對象問題292 
18.2.2開銷大的問題292 
18.2.3訪問控制問題293 
18.3代理模式293 
18.3.1解決遠程對象問題293 
18.3.2解決操作開銷大的問題294 
18.3.3解決訪問限制問題294 
18.4實現代理模式295 
18.4.1實現遠程對象代理295 
18.4.2實現開銷大的操作的代理297 
18.4.3實現訪問限制代理299 
18.5代理模式之變體302 
18.6代理模式的陷阱305 
18.7Cocoa中使用代理模式的實例306 
18.8在SportsStore應用中使用代理模式306 
18.8.1準備示例應用306 
18.8.2定義協議、工廠方法和代理類306 
18.8.3更新ProductDataStore類307 
18.8.4發送庫存更新308 
18.9總結310 

第四部分行為型模式

第19章責任鏈模式312 
19.1準備示例項目312 
19.2此模式旨在解決的問題314 
19.3責任鏈模式315 
19.4實現責任鏈模式315 
19.4.1創建並使用責任鏈317 
19.4.2使用責任鏈模式318 
19.5責任鏈模式之變體318 
19.5.1使用工廠方法模式318 
19.5.2責任鏈響應反饋319 
19.5.3通知責任鏈中的其他鏈321 
19.6此模式的陷阱323 
19.7Cocoa中使用責任鏈模式的實例323 
19.8在SportsStore應用中使用責任鏈模式323 
19.8.1準備示例應用323 
19.8.2定義責任鍊及其鏈323 
19.9總結325 

第20章命令模式326 
20.1準備示例項目326 
20.2此模式旨在解決的問題327 
20.3命令模式328 
20.4實現命令模式328 
20.4.1定義Command協議329 
20.4.2定義Command實現類329 
20.4.3使用命令模式330 
20.4.4添加並發保護332 
20.4.5使用撤銷操作的功能333 
20.5命令模式之變體333
20.5.1創建複合命令334 
20.5.2將命令當作宏來用335 
20.5.3將閉包作為命令337 
20.6命令模式的陷阱339 
20.7Cocoa中使用命令模式的實例339 
20.8在SportsStore應用中使用命令模式340 
20.8.1準備示例項目340 
20.8.2實現撤銷功能340 
20.9總結343 

第21章中介者模式344 
21.1準備示例項目344 
21.2此模式旨在解決的問題346 
21.3中介者模式348 
21.4實現中介者模式348 
21.4.1定義Meditator類349 
21.4.2遵循Peer協議349 
21.4.3實現並發保護351 
21.5中介者模式之變體353 
21.5.1將更多的邏輯置於中介者中353 
21.5.2通用化中介者與其管理的對象之間的關係355 
21.6中介者模式的陷阱360 
21.7Cocoa中使用中介者模式的實例361 
21.8在SportsStore應用中使用中介者模式363 
21.9總結363 

第22章觀察者模式364 
22.1準備示例項目364 
22.2此模式旨在解決的問題366 
22.3觀察者模式366
22.4實現觀察者模式367 
22.4.1創建SubjectBase類368 
22.4.2遵循Subject協議369 
22.4.3遵循Observer協議369 
22.4.4使用觀察者模式370 
22.5觀察者模式之變體371 
22.5.1通知的通用化371 
22.5.2使用弱引用375 
22.5.3處理生命週期較短的主題對象376 
22.6觀察者模式的陷阱379 
22.7Cocoa中使用觀察者模式的實例379 
22.7.1用戶界面事件379 
22.7.2觀察屬性變化380 
22.8在SportsStore應用中使用此模式381 
22.8.1準備示例應用381 
22.8.2應用觀察者模式381 
22.9總結383 

第23章備忘錄模式384 
23.1準備示例項目384 
23.2此模式旨在解決的問題386 
23.3備忘錄模式387 
23.4實現備忘錄模式388 
23.4.1實現Memento類390 
23.5備忘錄模式之變體390 
23.6備忘錄模式的陷阱392 
23.7Cocoa中使用備忘錄模式的實例393 
23.8在SportsStore中使用備忘錄模式396
23.8.1準備示例項目396 
23.8.2實現備忘錄模式396 
23.9總結398 

第24章策略模式399 
24.1準備示例項目399 
24.2此模式旨在解決的問題400 
24.3策略模式401 
24.4實現策略模式402 
24.4.1定義策略和環境類402 
24.4.2使用策略模式403 
24.5策略模式之變體404 
24.6策略模式的陷阱405 
24.7Cocoa中使用策略模式的實例405 
24.7.1Cocoa框架中基於協議的策略405 
24.7.2Cocoa中基於選擇器的策略406 
24.8在SportsStore應用中使用策略模式407 
24.9總結407 

第25章訪問者模式408 
25.1準備示例項目408 
25.2此模式旨在解決的問題410 
25.3訪問者模式412 
25.4實現訪問者模式412 
25.4. 1遵循Shape協議414 
25.4.2創建訪問者416 
25.4.3使用訪問者416 
25.5訪問者模式之變體417 
25.6訪問模式的陷阱417 
25.7Cocoa中使用訪問者模式的實例417
25.8在SportsStore應用中使用訪問者模式417 
25.9總結417 

第26章模板方法模式418 
26.1準備示例項目418 
26.2此模式旨在解決的問題420 
26.3模板方法模式420 
26.4實現模板方法模式420 
26.5模板方法模式之變體422 
26.6模板方法模式的陷阱424 
26.7Cocoa中使用模板方法模式的實例424 
26.8在SportsStore應用中使用模板方法模式424 
26.9總結424 

第五部分MVC模式

第27章MVC模式426 
27.1準備示例項目426 
27.2此模式旨在解決的問題426 
27.3MVC模式426 
27.4實現MVC模式430 
27.4.1實現通用的代碼431 
27.4.2定義一個框架432 
27.4.3創建模型433 
27.4.4實現視圖435 
27.4.5定義控制器436 
27.4.6完善框架439 
27.4.7運行應用439 
27.4.8擴展應用440 
27.5MVC模式之變體444 
27.6MVC模式的陷阱444 
27.7Cocoa中使用MVC模式的實例444
27.8總結444