JavaScript設計模式與開發實踐

JavaScript設計模式與開發實踐

《JavaScript設計模式與開發實踐》是2015年人民郵電出版社出版的圖書,作者是曾探。

圖書簡介

本書是根據JavaScript語言的特性專門針對JavaScript語言全面總結的設計模式。全書共分為三個部分,第一部分講解了JavaScript語言面向對象和函式式編程的知識及其在設計模式方面的作用;第二部分通過一步步完善的代碼示例,由淺入深地講解了16個設計模式;第三部分講述了面向對象的設計原則及其在設計模式中的體現,以及一些常見的面向對象編程技巧和日常開發中的代碼重構。
書中所有示例均來自作者長期的開發實踐,與實際開發密切相關,適合初、中、高級Web前端開發人員閱讀,尤其適合想往架構師晉級的中高級程式設計師。

目錄

第一部分 基礎知識

第1章 面向對象的JavaScript 2

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.5 JavaScript的多態 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.5 JavaScript中的原型繼承 18

1.4.6 原型繼承的未來 22

1.4.6 小結 23

第2章 this、call和apply 24

2.1 this 24

2.1.1 this的指向 24

2.1.2 丟失的this 27

2.2 call和apply 29

2.2.1 call和apply的區別 29

2.2.2 call和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 高階函式實現AOP 47

3.2.4 高階函式的其他套用 49

3.3 小結 58

第二部分 設計模式

第4章 單例模式 60

4.1 實現單例模式 60

4.2 透明的單例模式 61

4.3 用代理實現單例模式 62

4.4 JavaScript中的單例模式 63

4.5 惰性單例 65

4.6 通用的惰性單例 68

4.7 小結 70

第5章 程式設計師與算法 71

5.1 使用策略模式計算獎金 72

5.2 JavaScript版本的策略模式 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.1 jQuery中的疊代器 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.3 DOM事件 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.12 JavaScript實現發布—訂閱模式的

便利性 124

8.13 小結 124

第9章 命令模式 125

9.1 命令模式的用途 125

9.2 命令模式的例子——選單程式 126

9.3 JavaScript中的命令模式 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 第一個例子Coffee or Tea 151

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實現Coffee or Tea的例子 157

11.3.4 JavaScript沒有抽象類的

缺點和變通 158

11.4 模板方法模式的使用場景 159

11.5 鉤子方法 160

11.6 好萊塢原則 162

11.7 真的需要“繼承”嗎 162

11.8 小結 164

第12章 享元模式 165

12.1 初識享元模式 165

12.2 內部狀態與外部狀態 166

12.3 享元模式的通用結構 167

12.4 檔案上傳的例子 167

12.4.1 對象爆炸 168

12.4.2 享元模式重構檔案上傳 170

12.4.3 剝離外部狀態 170

12.4.4 工廠進行對象實例化 171

12.4.5 管理器封裝外部狀態 171

12.5 享元模式的適用性 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.7 AOP的套用實例 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

相關詞條

熱門詞條

聯絡我們