作 者:曾探 著
定 價:69.8
出 版 社:人民郵電出版社
出版日期:2015年05月01日
頁 數:312
裝 幀:平裝
ISBN:9787115388889
騰訊前端Alloy Team團隊出品,資 深前端架構師曾探力作 全面涵蓋專門針對JavaScript的16個設計模式 深入剖析面向對像設計原則、編程技巧及代碼重構設計模式是軟件設計中經過了大量實際項目驗證的可復用的優 秀解決方案,它有助於程序員寫出可復用和可維護性高的程序。許多優 秀的JavaScript開源框架都運用了不少設計模式,越來越多的程序員從設計模式中獲益,也許是改善了自己編寫的某個軟件,也許是更好地理解了面向對像的編程思想。無論如何,繫統地學習設計模式都會令你受益匪淺。本等
●第一部分基礎知識
第1章面向對像的JavaScript2
1.1動態類型語言和鴨子類型2
1.2多態4
1.2.1一段“多態”的JavaScript代碼5
1.2.2對像的多態性5
1.2.3類型檢查和多態6
1.2.4使用繼承得到多態效果7
1.2.5JavaScript的多態8
1.2.6多態在面向對像程序設計中的作用9
1.2.7設計模式與多態11
1.3封裝12
1.3.1封裝數據12
1.3.2封裝實現12
1.3.3封裝類型13
1.3.4封裝變化13
1.4原型模式和基於原型繼承的JavaScript對像繫統14
1.4.1使用克隆的原型模式14
1.4.2克隆是創建對像的手段15
1.4.3體驗Io語言15
1.4.4原型編程範型的一些規則17
1.4.5JavaScript中的原型繼承18
1.4.6原型繼承的未來22
1.4.6小結23
第2章this、call和apply24
2.1this24
2.1.1this的指向24
2.1.2丟失的this27
2.2call和apply29
2.2.1call和apply的區別29
2.2.2call和apply的用途30
第3章閉包和高階函數35
3.1閉包35
3.1.1變量的作用域35
3.1.2變量的生存周期36
3.1.3閉包的更多作用38
3.1.4閉包和面向對像設計40
3.1.5用閉包實現命令模式41
3.1.6閉包與內存管理43
3.2高階函數44
3.2.1函數作為參數傳遞44
3.2.2函數作為返回值輸出46
3.2.3高階函數實現AOP47
3.2.4高階函數的其他應用49
3.3小結58
第二部分設計模式
第4章單例模式60
4.1實現單例模式60
4.2透明的單例模式61
4.3用代理實現單例模式62
4.4JavaScript中的單例模式63
4.5惰性單例65
4.6通用的惰性單例68
4.7小結70
第5章程序員與算法71
5.1使用策略模式計算獎金72
5.2JavaScript版本的策略模式75
5.3多態在策略模式中的體現76
5.4使用策略模式實現緩動動畫76
5.4.1實現動畫效果的原理76
5.4.2思路和一些準備工作77
5.4.3讓小球運動起來77
5.5更廣義的“算法”80
5.6表單校驗80
5.6.1表單校驗的第一個版本80
5.6.2用策略模式重構表單校驗81
5.6.3給某個文本輸入框添加多種校驗規則83
5.7策略模式的優缺點86
5.8一等函數對像與策略模式86
5.9小結87
第6章代理模式88
6.1第一個例子——小明追MM的故事88
6.2保護代理和虛擬代理91
6.3虛擬代理實現圖片預加載91
6.4代理的意義93
6.5代理和本體接口的一致性94
6.6虛擬代理合並HTTP請求95
6.7虛擬代理在惰性加載中的應用97
6.8緩存代理99
6.8.1緩存代理的例子——計算乘積99
6.8.2緩存代理用於ajax異步請求數據100
6.9用高階函數動態創建代理100
6.10其他代理模式101
6.11小結102
第7章迭代器模式103
7.1jQuery中的迭代器103
7.2實現自己的迭代器104
7.3內部迭代器和外部迭代器104
7.4迭代類數組對像和字面量對像106
7.5倒序迭代器106
7.6中止迭代器107
7.7迭代器模式的應用舉例107
7.8小結109
第8章發布—訂閱模式110
8.1現實中的發布—訂閱模式110
8.2發布—訂閱模式的作用110
8.3DOM事件111
8.4自定義事件112
8.5發布—訂閱模式的通用實現113
8.6取消訂閱的事件115
8.7真實的例子——網站登錄115
8.8全局的發布—訂閱對像117
8.9模塊間通信119
8.10必須先訂閱再發布嗎120
8.11全局事件的命名衝突121
8.12JavaScript實現發布—訂閱模式的便利性124
8.13小結124
第9章命令模式125
9.1命令模式的用途125
9.2命令模式的例子——菜單程序126
9.3JavaScript中的命令模式128
9.4撤銷命令130
9.5恢復命令日志132
9.6命令隊列133
9.7宏命令134
9.8智能命令與傻瓜命令135
9.9小結136
第10章組合模式137
10.1回顧宏命令138
10.2組合模式的用途139
10.3請求在樹中傳遞的過程139
10.4更強大的宏命令140
10.5抽像類在組合模式中的作用143
10.6透明性帶來的安全問題144
10.7組合模式的例子——掃描文件夾145
10.8一些值得注意的地方147
10.9引用父對像148
10.10何時使用組合模式150
10.11小結150
第11章模板方法模式151
11.1模板方法模式的定義和組成151
11.2第一個例子CoffeeorTea151
11.2.1先泡一杯咖啡152
11.2.2沏一壺茶152
11.2.3分離出共同點153
11.2.4創建Coffee子類和Tea子類154
11.3抽像類156
11.3.1抽像類的作用156
11.3.2抽像方法和具體方法156
11.3.3用Java實現CoffeeorTea的例子157
11.3.4JavaScript沒有抽像類的缺點和變通158
11.4模板方法模式的使用場景159
11.5鉤子方法160
11.6好萊塢原則162
11.7真的需要“繼承”嗎162
11.8小結164
第1模式165
12.1模式165
12.2內部狀態與外部狀態166
12模式的通用結構167
12.4文件上傳的例子167
12.4.1對像爆炸168
12.4模式重構文件上傳170
12.4.3剝離外部狀態170
12.4.4工廠進行對像實例化171
12.4.5管理器封裝外部狀態171
12模式的適用性173
12.6再談內部狀態和外部狀態173
12.6.1沒有內部狀173
12.6.2沒有外部狀態”174
12.7對像池175
12.7.1對像池實現175
12.7.2通用對像池實現177
12.8小結178
第13章職責鏈模式179
13.1現實中的職責鏈模式179
13.2實際開發中的職責鏈模式180
13.3用職責鏈模式重構代碼181
13.4靈活可拆分的職責鏈節點183
13.5異步的職責鏈184
13.6職責鏈模式的優缺點185
13.7用AOP實現職責鏈186
13.8用職責鏈模式獲取文件上傳對像187
13.9小結188
第14章中介者模式189
14.1現實中的中介者190
14.2中介者模式的例子——泡泡堂遊戲191
14.2.1為遊戲增加隊伍192
14.2.2玩家增多帶來的困擾194
14.2.3用中介者模式改造泡泡堂遊戲194
14.3中介者模式的例子——購買商品199
14.3.1開始編寫代碼201
14.3.2對像之間的聯繫202
14.3.3可能遇到的困難203
14.3.4引入中介者205
14.4小結207
第15章裝飾者模式209
15.1給對像動態添加職責210
15.2模擬傳統面向對像語言的裝飾者模式210
15.3裝飾者也是包裝器211
15.4回到JavaScript的裝飾者212
15.5裝飾函數213
15.6用AOP裝飾函數215
15.7AOP的應用實例217
15.7.1數據統計上報217
15.7.2統計函數執行時間218
15.7.3用AOP動態改變函數的參數219
15.7.4插件式的表單驗證221
15.8裝飾者模式和代理模式224
15.9小結224
第16章狀態模式225
16.1初識狀態模式225
16.1.1第一個例子:電燈程序226
16.1.2狀態模式改進電燈程序227
16.2狀態模式的定義231
16.3狀態模式的通用結構231
16.4缺少抽像類的變通方式232
16.5另一個狀態模式示例——文件上傳233
……
本書是根據JavaScript語言的特性,全面總結了實際工作中常用的設計模式。全書共分為三個部分,第一部分講解了JavaScript語言面向對像和函數式編程的知識及其在設計模式方面的作用;第二部分通過一步步完善的代碼示例,由淺入深地講解了16個設計模式;第三部分講述了面向對像的設計原則及其在設計模式中的體現,以及一些常見的面向對像編程技巧和日常開發中的代碼重構。書中所有示例均來自作者長期的開發實踐,與實際開發密切相關,適合初、中、高級Web前端開發人員閱讀,尤其適合想往架構師晉級的中高級程序員。
曾探 著
曾探,2007年畢業於吉林大學軟件學院,目前就職於騰訊AlloyTealll前端團隊,高級工程師。 曾參與Web QQ、QQ群、O+開發者網站、微雲、QQ興趣部落等大型前端項目的開發。有Java、Pvthon和JavaScript的開發經驗,業餘作品有HTML5版街頭霸王等。 平時喜歡電影和音樂,業餘時間是一名健身教練。