JavaScript設計模式與開發實踐 JavaScript设计模式与开发实践

曾探

立即出貨 (庫存=1)

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

商品描述

 

<內容簡介>

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

 

<章節目錄>

第一部分  基礎知識
  第1章  面向對象的JavaScript
    1.1  動態類型語言和鴨子類型
    1.2  多態
      1.2.1  一段「多態」的JavaScript代碼
      1.2.2  對象的多態性
      1.2.3  類型檢查和多態
      1.2.4  使用繼承得到多態效果
      1.2.5  JavaScript的多態
      1.2.6  多態在面向對象程序設計中的作用
      1.2.7  設計模式與多態
    1.3  封裝
      1.3.1  封裝數據
      1.3.2  封裝實現
      1.3.3  封裝類型
      1.3.4  封裝變化
    1.4  原型模式和基於原型繼承的JavaScript對象系統
      1.4.1  使用克隆的原型模式
      1.4.2  克隆是創建對象的手段
      1.4.3  體驗Io語言
      1.4.4  原型編程範型的一些規則
      1.4.5  JavaScript中的原型繼承
      1.4.6  原型繼承的未來
      1.4.6  小結
  第2章  this、call和apply
    2.1  this
      2.1.1  this的指向
      2.1.2  丟失的this
    2.2  call和apply
      2.2.1  call和apply的區別
      2.2.2  call和apply的用途
  第3章  閉包和高階函數
    3.1  閉包
      3.1.1  變量的作用域
      3.1.2  變量的生存周期
      3.1.3  閉包的更多作用
      3.1.4  閉包和麵向對象設計
      3.1.5  用閉包實現命令模式
      3.1.6  閉包與內存管理
    3.2  高階函數
      3.2.1  函數作為參數傳遞
      3.2.2  函數作為返回值輸出
      3.2.3  高階函數實現AOP
      3.2.4  高階函數的其他應用
    3.3  小結
第二部分  設計模式
  第4章  單例模式
    4.1  實現單例模式
    4.2  透明的單例模式
    4.3  用代理實現單例模式

    4.4  JavaScript中的單例模式
    4.5  惰性單例
    4.6  通用的惰性單例
    4.7  小結
  第5章  程序員與演算法
    5.1  使用策略模式計算獎金
    5.2  JavaScript版本的策略模式
    5.3  多態在策略模式中的體現
    5.4  使用策略模式實現緩動動畫
      5.4.1  實現動畫效果的原理
      5.4.2  思路和一些準備工作
      5.4.3  讓小球運動起來
    5.5  更廣義的「演算法」
    5.6  表單校驗
      5.6.1  表單校驗的第一個版本
      5.6.2  用策略模式重構表單校驗
      5.6.3  給某個文本輸入框添加多種校驗規則
    5.7  策略模式的優缺點
    5.8  一等函數對象與策略模式
    5.9  小結
  第6章  代理模式
    6.1  第一個例子——小明追MM的故事
    6.2  保護代理和虛擬代理
    6.3  虛擬代理實現圖片預加載
    6.4  代理的意義
    6.5  代理和本體接口的一致性
    6.6  虛擬代理合併HTTP請求
    6.7  虛擬代理在惰性加載中的應用
    6.8  緩存代理
      6.8.1  緩存代理的例子——計算乘積
      6.8.2  緩存代理用於ajax異步請求數據
    6.9  用高階函數動態創建代理
    6.10  其他代理模式
    6.11  小結
  第7章  迭代器模式
    7.1  jQuery中的迭代器
    7.2  實現自己的迭代器
    7.3  內部迭代器和外部迭代器
    7.4  迭代類數組對象和字面量對象
    7.5  倒序迭代器
    7.6  中止迭代器
    7.7  迭代器模式的應用舉例
    7.8  小結
  第8章  發布-訂閱模式
    8.1  現實中的發布-訂閱模式
    8.2  發布-訂閱模式的作用
    8.3  DOM事件
    8.4  自定義事件
    8.5  發布-訂閱模式的通用實現
    8.6  取消訂閱的事件

    8.7  真實的例子——網站登錄
    8.8  全局的發布-訂閱對象
    8.9  模塊間通信
    8.10  必須先訂閱再發布嗎
    8.11  全局事件的命名衝突
    8.12  JavaScript實現發布-訂閱模式的便利性
    8.13  小結
  第9章  命令模式
    9.1  命令模式的用途
    9.2  命令模式的例子——菜單程序
    9.3  JavaScript中的命令模式
    9.4  撤銷命令
    9.5  恢覆命令日誌
    9.6  命令隊列
    9.7  宏命令
    9.8  智能命令與傻瓜命令
    9.9  小結
  第10章  組合模式
    10.1  回顧宏命令
    10.2  組合模式的用途
    10.3  請求在樹中傳遞的過程
    10.4  更強大的宏命令
    10.5  抽象類在組合模式中的作用
    10.6  透明性帶來的安全問題
    10.7  組合模式的例子——掃描文件夾
    10.8  一些值得註意的地方
    10.9  引用父對象
    10.10  何時使用組合模式
    10.11  小結
  第11章  模板方法模式
    11.1  模板方法模式的定義和組成
    11.2  第一個例子Coffee or Tea
      11.2.1  先泡一杯咖啡
      11.2.2  沏一壺茶 
      11.2.3  分離出共同點
      11.2.4  創建Coffee子類和Tea子類
    11.3  抽象類
      11.3.1  抽象類的作用
      11.3.2  抽象方法和具體方法
      11.3.3  用Java實現Coffee or Tea的例子
      11.3.4  JavaScript沒有抽象類的缺點和變通
    11.4  模板方法模式的使用場景
    11.5  鉤子方法
    11.6  好萊塢原則
    11.7  真的需要「繼承」嗎
    11.8  小結
  第12章  享元模式
    12.1  初識享元模式
    12.2  內部狀態與外部狀態
    12.3  享元模式的通用結構

    12.4  文件上傳的例子
      12.4.1  對象爆炸
      12.4.2  享元模式重構文件上傳
      12.4.3  剝離外部狀態
      12.4.4  工廠進行對象實例化
      12.4.5  管理器封裝外部狀態
    12.5  享元模式的適用性
    12.6  再談內部狀態和外部狀態
      12.6.1  沒有內部狀態的享元
      12.6.2  沒有外部狀態的「享元」
    12.7  對象池
      12.7.1  對象池實現
      12.7.2  通用對象池實現
    12.8  小結
  第13章  職責鏈模式
    13.1  現實中的職責鏈模式
    13.2  實際開發中的職責鏈模式
    13.3  用職責鏈模式重構代碼
    13.4  靈活可拆分的職責鏈節點
    13.5  異步的職責鏈
    13.6  職責鏈模式的優缺點
    13.7  用AOP實現職責鏈
    13.8  用職責鏈模式獲取文件上傳對象
    13.9  小結
  第14章  中介者模式
    14.1  現實中的中介者
    14.2  中介者模式的例子——泡泡堂遊戲
      14.2.1  為遊戲增加隊伍
      14.2.2  玩家增多帶來的困擾
      14.2.3  用中介者模式改造泡泡堂遊戲
    14.3  中介者模式的例子——購買商品
      14.3.1  開始編寫代碼
      14.3.2  對象之間的聯繫
      14.3.3  可能遇到的困難
      14.3.4  引入中介者
    14.4  小結
  第15章  裝飾者模式
    15.1  給對象動態添加職責
    15.2  模擬傳統面向對象語言的裝飾者模式
    15.3  裝飾者也是包裝器
    15.4  回到JavaScript的裝飾者
    15.5  裝飾函數
    15.6  用AOP裝飾函數
    15.7  AOP的應用實例
      15.7.1  數據統計上報
      15.7.2  統計函數執行時間
      15.7.3  用AOP動態改變函數的參數
      15.7.4  插件式的表單驗證
    15.8  裝飾者模式和代理模式
    15.9  小結

  第16章  狀態模式
    16.1  初識狀態模式
      16.1.1  第一個例子:電燈程序
      16.1.2  狀態模式改進電燈程序
    16.2  狀態模式的定義
    16.3  狀態模式的通用結構
    16.4  缺少抽象類的變通方式
    16.5  另一個狀態模式示例——文件上傳
    16.6  狀態模式的優缺點
    16.7  狀態模式中的性能優化點
    16.8  狀態模式和策略模式的關係
    16.9  JavaScriDt版本的狀態機
    16.10  表驅動的有限狀態機
    16.11  實際項目中的其他狀態機
    16.12  小結
  第17章  適配器模式
    17.1  現實中的適配器
    17.2  適配器模式的應用
    17.3  小結
第三部分  設計原則和編程技巧
  第18章  單一職責原則
    18.1  設計模式中的SRP原則
    18.2  何時應該分離職責
    18.3  違反SRP原則
    18.4  SRP原則的優缺點
  第19章  最少知識原則
    19.1  減少對象之間的聯繫
    19.2  設計模式中的LKP原則
    19.3  封裝在LKP原則中的體現
  第20章  開放-封閉原則
    20.1  擴展Window.onload函數
    20.2  開放和封閉
    20.3  用對象的多態性消除條件分支
    20.4  找出變化的地方
    20.5  設計模式中的開放-封閉原則
    20.6  開放-封閉原則的相對性
    20.7  接受第一次愚弄
  第21章  開放-封閉原則接口和麵向接口編程
    21.1  回到JEIVa的抽象類
    21.2  interface
    21.3  JavaScript語言是否需要抽象類和interface
    21.4  用鴨子類型進行接口檢查
    21.5  用TypeScript編寫基於interface的命令模式
  第22章  開放-封閉原則代碼重構
    22.1  提煉函數
    22.2  合併重複的條件片段
    22.3  把條件分支語句提煉成函數
    22.4  合理使用循環
    22.5  提前讓函數退出代替嵌套條件分支
    22.6  傳遞對象參數代替過長的參數列表

    22.7  盡量減少參數數量
    22.8  少用三目運算符
    22.9  合理使用鏈式調用
    22.10  分解大型類
    22.11  用return退出多重循環
參考文獻

 

<作者介紹>

曾探
曾探,2007年畢業於吉林大學軟件學院,目前就職於騰訊AlloyTealll前端團隊,高級工程師。     曾參與Web QQ、QQ群、O+開發者網站、微雲、QQ興趣部落等大型前端項目的開發。有Java、Pvthon和JavaScript的開發經驗,業餘作品有HTML5版街頭霸王等。     平時喜歡電影和音樂,業餘時間是一名健身教練。