Javascript設(shè)計模式

  • 單例模式

單例就是保證一個類只有一個實例,實現(xiàn)的方法一般是先判斷實例存在與否,如果存在直接返回,如果不存在就創(chuàng)建了再返回,這就確保了一個類只有一個實例對象。
如果一個函數(shù)需要對一個外部變量進行處理(多人協(xié)作的時候務(wù)必遵守全局變量的初始狀態(tài)的保持)if( 變量 有的話):{return 變量;}else(沒有的話){為了保持外部變量初始狀態(tài)的維持,在內(nèi)部創(chuàng)建一個局部變量var 變量,然后創(chuàng)建閉包,將函數(shù)執(zhí)行結(jié)果賦值給這個內(nèi)部變量。}作用:創(chuàng)建閉包之后,內(nèi)部變量很好的代替了全部變量實現(xiàn)效果,而且函數(shù)執(zhí)行完畢之后,內(nèi)部變量自動消失,保持了全局變量的初始化狀態(tài),完美~

  • 簡單工廠模式

簡單工廠就是一個類的所有實例對象都有相同的接口,每個實例對象之間的不同依靠后期實例化類之后對象自身進行設(shè)計。構(gòu)造函數(shù)就是一個典例。
構(gòu)造函數(shù)中的this指向的是實例化出來的每個對象。
構(gòu)造函數(shù)繼承的時候特別不方便,每個實例都共享構(gòu)造函數(shù)里面的所有成員屬性和成員方法。
一般情況下構(gòu)造函數(shù)函數(shù)名建議大寫,以示區(qū)別。

  • 觀察者模式

觀察者模式(也叫做發(fā)布者-訂閱者模式)js中的Dom事件是典例?!喊粹o點擊alert123的一個案例』點擊相應(yīng)函數(shù)已經(jīng)被寫好,只有按鈕被點擊的時候才會去產(chǎn)生調(diào)用函數(shù)的指令。好萊塢名言『不要給我打電話, 我會給你打電話』。也就是一個復(fù)雜的東西被很好的分解成幾個部分,這幾個部分之間外部沒有緊密的聯(lián)系,唯一的聯(lián)系只是一個『信號』。訂閱者不需要去管發(fā)布者,就像這幾個部分之間的關(guān)系一樣。

  • 適配器模式

適配兩個接口,將兩個模塊之間很好的做了聯(lián)系,相關(guān)的變量,方法進行轉(zhuǎn)換,var my.變量 = function 適配器(he.變量)

  • 代理模式

是將對一個對象的訪問,交給另一個代理對象去操作
典例是因為性能問題使用代理模式的機會是非常多的。比如頻繁的訪問dom節(jié)點, 頻繁的請求遠程資源. 可以把操作先存到一個緩沖區(qū), 然后自己選擇真正的觸發(fā)時機.

  • 外觀模式

外觀模式為函數(shù)和方法提供一個高級接口,更加便于外界的調(diào)用
一個典型例子:

var stopEvent = function( e ){   //同時阻止事件默認行為和冒泡
  e.stopPropagation();
  e.preventDefault();
}
  • 策略模式

不是太懂。
但是典例是一個表單驗證的功能,需要同時驗證長度,類型,敏感詞等。將每種驗證方法都用策略模式封裝起來,使用的時候僅僅提供每種策略的名字。

  • 模板方法模式

模板方法強調(diào)父類去調(diào)用子類,而非反向的控制。父類固定的模板,使得子類去完善特定的功能,然后父類調(diào)用子類。

  • 中介模式

中介模式Controler,ABC通過W很好的與DEF聯(lián)系起來,但是ABC對DEF并沒有了解,全靠著W保持對雙方關(guān)系的維護。與代理模式的不同是代理模式通過W將A與B聯(lián)系起來,A必然知道B的一切。

  • 迭代器模式

迭代式模式提供一種方法來對一個集合里面的每個元素進行一定的操作,但是又不對外暴漏方法里面的表示。

  • 組合模式

組合模式相當于一個大樹,操作最上層的接口,對下層所有的成員進行相同的操作。與外觀模式不同的是比外觀模式對內(nèi)部對象的操作更具有統(tǒng)一性,并沒有指明內(nèi)部對象的具體名字。

  • 備忘錄模式

備忘錄模式經(jīng)常用于頁面數(shù)據(jù)的緩存,比如一個分頁應(yīng)用的控件,先去檢測先前的數(shù)據(jù)有沒有緩存在用戶的瀏覽器中,有的話直接調(diào)用,沒有的話在進行請求數(shù)據(jù)。

  • 職責鏈模式

職責鏈模式經(jīng)常用于一級一級的請求。js中的事件冒泡就是作為一個職責鏈來實現(xiàn)的。一個事件在某個節(jié)點上被觸發(fā),然后向根節(jié)點傳遞, 直到被節(jié)點捕獲。

  • 享元模式

共享嘛~

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容