我是一名初級前端開發(fā)者糜俗,目前精力著眼于 Plain JavaScript 上堡妒,我的博客 if-true.com县爬,原文鏈接:《JavaScript 設(shè)計模式與開發(fā)指南》筆記(二)蜜暑。歡迎交流 :)
本書筆記分為三個部分晨川,也是按照全書目錄三個部分劃分的画恰,當(dāng)前是第二部分設(shè)計模式彭谁,另外兩部分分別是:《JavaScript 設(shè)計模式與開發(fā)指南》筆記(一)、《JavaScript 設(shè)計模式與開發(fā)指南》筆記(三)
第二部分 設(shè)計模式
第4章 單例模式
-
單例模式定義
保證一個類僅有一個實例允扇,并提供一個訪問它的全局訪問點缠局。標(biāo)準(zhǔn)的單例模式無非是用一個變量標(biāo)記當(dāng)前是否已經(jīng)為某個類創(chuàng)建過對象则奥。
代理模式
-
惰性單例模式
在合適的時候才創(chuàng)建對象,并且只創(chuàng)建唯一的一個甩鳄。
-
降低全局變量帶來的命名污染方法
- 使用命名空間
- 使用閉包封裝私有變量
第5章 策略模式
- 策略模式的定義是:定義一系列的算法逞度,把它們一個個封裝起來,并且它們是可以相互替換妙啃。
- 策略模式的目的是將算法的使用與算法的實現(xiàn)分離開來档泽。
- 通過使用策略模式重構(gòu)代碼,消除了原程序中大片的條件分支語句揖赴。
- 三個例子:計算獎金馆匿、緩動動畫、表單驗證燥滑。
第6章 代理模式
保護(hù)代理和虛擬代理
虛擬代理實現(xiàn)圖片預(yù)加載
虛擬代理合并 HTTP 請求
虛擬代理在惰性加載中的應(yīng)用
緩存代理
-
其他代理模式
- 防火墻代理
- 遠(yuǎn)程代理
- 保護(hù)代理
- 智能引用代理
- 寫時復(fù)制代理
JavaScript 開發(fā)中最常見的是虛擬代理和緩存代理渐北。
第7章 迭代器模式
第8章 發(fā)布-訂閱模式
- 優(yōu)點:一為時間上的解耦,二為對象之間的解耦铭拧。
第9章 命令模式
(needToReview)
第10章 組合模式
深度遍歷樹
組合模式可以方便地構(gòu)造一棵樹來表述對象的部分-整體結(jié)構(gòu)
第11章 模板方法模式
- 在模板方法模式中赃蛛,子類實現(xiàn)中的相同部分被上移到父類中,而不同的部分留在子類來實現(xiàn)搀菩。
第12章 享元模式
- 享元的核心是運用共享技術(shù)來有效支持大量細(xì)粒度的對象
- 如何劃分內(nèi)部狀態(tài)和外部狀態(tài)(P167)
- 享元模式是一種用時間換空間的優(yōu)化模式
- 當(dāng)對象沒有內(nèi)部狀態(tài)的時候呕臂,生產(chǎn)共享對象的工廠實際上變成了一個單例工廠。
- 對象池是另外一種性能優(yōu)化方案肪跋,跟享元模式有一些相似之處歧蒋,但沒有分離內(nèi)部狀態(tài)和外部狀態(tài)的過程。
第13章 職責(zé)鏈模式
- 銷售手機(jī)例子
第14章 中介者模式
面向?qū)ο笤O(shè)計鼓勵將行為分布到各個對象中州既,把對象劃分成更小的粒度谜洽,有助于增強對象的可復(fù)用性,但由于這些細(xì)粒度對象之間的關(guān)系激增吴叶,又有可能反過來降低它們的可復(fù)用性阐虚。中介者模式的作用就是解除對象與對象之間的緊耦合關(guān)系。
中介者模式是迎合迪米特法則的一種實現(xiàn)蚌卤。迪米特法則也叫最少知識原則敌呈,是指一個對象影噶盡可能少地了解另外的對象。
第15章 裝飾者模式
- 幾個例子
- 裝飾者模式與代理模式區(qū)別
第16章 狀態(tài)模式
- 通常談到封裝造寝,一般都會優(yōu)先封裝對象的行為,而不是對象的狀態(tài)吭练。但在狀態(tài)模式中剛好相反诫龙,狀態(tài)模式的關(guān)鍵是把事物的每種狀態(tài)都封裝成單獨的類。
- 狀態(tài)模式和策略模式