我是一名初級前端開發者,目前精力著眼于 Plain JavaScript 上,我的博客 if-true.com,原文鏈接:《JavaScript 設計模式與開發指南》筆記(二)。歡迎交流 :)
本書筆記分為三個部分,也是按照全書目錄三個部分劃分的,當前是第二部分設計模式,另外兩部分分別是:《JavaScript 設計模式與開發指南》筆記(一)、《JavaScript 設計模式與開發指南》筆記(三)
第二部分 設計模式
第4章 單例模式
-
單例模式定義
保證一個類僅有一個實例,并提供一個訪問它的全局訪問點。標準的單例模式無非是用一個變量標記當前是否已經為某個類創建過對象。
代理模式
-
惰性單例模式
在合適的時候才創建對象,并且只創建唯一的一個。
-
降低全局變量帶來的命名污染方法
- 使用命名空間
- 使用閉包封裝私有變量
第5章 策略模式
- 策略模式的定義是:定義一系列的算法,把它們一個個封裝起來,并且它們是可以相互替換。
- 策略模式的目的是將算法的使用與算法的實現分離開來。
- 通過使用策略模式重構代碼,消除了原程序中大片的條件分支語句。
- 三個例子:計算獎金、緩動動畫、表單驗證。
第6章 代理模式
保護代理和虛擬代理
虛擬代理實現圖片預加載
虛擬代理合并 HTTP 請求
虛擬代理在惰性加載中的應用
緩存代理
-
其他代理模式
- 防火墻代理
- 遠程代理
- 保護代理
- 智能引用代理
- 寫時復制代理
JavaScript 開發中最常見的是虛擬代理和緩存代理。
第7章 迭代器模式
第8章 發布-訂閱模式
- 優點:一為時間上的解耦,二為對象之間的解耦。
第9章 命令模式
(needToReview)
第10章 組合模式
深度遍歷樹
組合模式可以方便地構造一棵樹來表述對象的部分-整體結構
第11章 模板方法模式
- 在模板方法模式中,子類實現中的相同部分被上移到父類中,而不同的部分留在子類來實現。
第12章 享元模式
- 享元的核心是運用共享技術來有效支持大量細粒度的對象
- 如何劃分內部狀態和外部狀態(P167)
- 享元模式是一種用時間換空間的優化模式
- 當對象沒有內部狀態的時候,生產共享對象的工廠實際上變成了一個單例工廠。
- 對象池是另外一種性能優化方案,跟享元模式有一些相似之處,但沒有分離內部狀態和外部狀態的過程。
第13章 職責鏈模式
- 銷售手機例子
第14章 中介者模式
面向對象設計鼓勵將行為分布到各個對象中,把對象劃分成更小的粒度,有助于增強對象的可復用性,但由于這些細粒度對象之間的關系激增,又有可能反過來降低它們的可復用性。中介者模式的作用就是解除對象與對象之間的緊耦合關系。
中介者模式是迎合迪米特法則的一種實現。迪米特法則也叫最少知識原則,是指一個對象影噶盡可能少地了解另外的對象。
第15章 裝飾者模式
- 幾個例子
- 裝飾者模式與代理模式區別
第16章 狀態模式
- 通常談到封裝,一般都會優先封裝對象的行為,而不是對象的狀態。但在狀態模式中剛好相反,狀態模式的關鍵是把事物的每種狀態都封裝成單獨的類。
- 狀態模式和策略模式