天天看點

《JavaScript設計模式 張》整理一、建立型設計模式二、結構型設計模式三、行為型設計模式四、技巧型設計模式五、架構型設計模式

包括簡單工廠、工廠方法、抽象工廠、建造者、原型和單例模式。

1)簡單工廠

又叫靜态工廠方法,由一個工廠對象決定建立某一種産品對象類的執行個體。

兩種實作方式,第一種是通過類執行個體化對象建立,第二種是建立一個新對象然後包裝增強其屬性和功能。

2)工廠方法

通過對産品類的抽象使其建立業務主要負責用于建立多類産品的執行個體。

将工廠方法看作是一個執行個體化對象的工廠類。

3)抽象工廠

通過對類的工廠抽象使其業務用于對産品類簇的建立,而不負責建立某一類産品的執行個體。

用它作為父類來建立一些子類。

4)建造者

将一個複雜對象的建構層與其表示層互相分離,同樣的建構過程可采用不同的表示。

它更關心的是建立這個對象的整個過程,甚至于建立對象的各個細節。

5)原型模式

用原型執行個體指向建立對象的類,使用于建立新的對象的類共享原型對象的屬性以及方法。

原型模式就是将可複用的、可共享的、耗時大的從基類中提取出來,放在其原型中,子類通過組合繼承或寄生繼承将方法和屬性繼承下來。

6)單例模式

隻允許執行個體化一次的對象類。有時我們也用一個對象來規劃一個命名空間,井井有條的管理對象上的屬性和方法。

1)外觀模式

為一組複雜的子系統接口提供一個更進階的統一接口,通過這個接口使得對子系統接口的通路更容易。

在JS中有時也會用于對底層結構相容性做統一封裝來簡化使用者使用。

2)擴充卡模式

将一個類(對象)的接口(方法或屬性)轉化成另外一個接口,滿足使用者需求,使類(對象)之間接口的不相容問題通過擴充卡解決。

适配異類架構,參數擴充卡,适配資料。

3)代理模式

由于一個對象不能直接引用另一個對象,是以需要代理對象在這兩個對象之間起到中介的作用。

站長統計、JSONP、代理模版。

4)裝飾者模式

在不改變原對象的基礎上,通過對其進行包裝拓展(添加屬性或方法)使原有對象能夠滿足更複雜的需求。

5)橋接模式

在系統沿着多個緯度變化的同時,不增加其複雜度并已達到解耦。

提取共同點,事件與業務邏輯之間的橋梁,多元化對象。

将實作層(如元素的綁定事件)與抽象層(如修飾頁面UI邏輯)解耦分離,使兩部分可以獨立變化。

6)組合模式

又稱部分-整體模式,将對象組合成樹形結構以表示“部分整體”的層次結構。

組合模式使得使用者對單個對象群組合對象的使用具有一緻性。

組合對象類通過繼承同一個父類使其具有統一的方法,此時單體成員群組合成員行為表現就比較一緻。

7)享元模式

運用共享技術有效的支援大量的細粒度對象,避免對象間擁有相同内容造成多餘的開銷。

享元對象,享元動作。将共有的方法和資料提取,以提高頁面效率。

1)模版方法模式

父類中定義一組操作算法骨架,而将一些實作步驟延遲到子類中,使得子類可以不改變父類的結構算法的同時可重新定義算法中某些步驟的實作。

提示框歸一化。

2)觀察者模式

又被稱作釋出-訂閱模式或消息機制,定義了一種依賴關系,解決了主體對象與觀察者之間功能的耦合。

最大的作用是解決類或對象之間的耦合,解決兩個互相依賴的對象,使其依賴于觀察者的消息機制。

3)狀态模式

當一個對象的内部狀态發生改變時,會導緻其行為的改變,這看起來像是改變了對象。

狀态模式既是解決程式中臃腫的分支判斷語句問題,将每個分支轉化為一種狀态獨立出來,友善每種狀态的管理又不至于每次執行時周遊所有分支。

4)政策模式

将定義的一組算法封裝起來,使其互相之間可以替換。封裝的算法具有一定的獨立性,不會随用戶端變化而變化。

政策模式使得算法脫離于子產品邏輯而獨立管理,使我們專心研發算法,而不必受子產品邏輯所限制。

對分支語句的優化目前有3種,工廠方法、狀态模式與政策模式。

5)職責鍊模式

解決請求的發送者與請求的接收者之間的耦合,通過職責鍊上的多個對象分解請求流程,實作請求在多個對象之間的傳遞,直到最後一個對象完成請求的處理。

分解需求,把每件事情分解成一個子產品對象處理,需求分解成互相獨立的部分,分工合作隻做自己份内的事情,無關的事情傳到下一個對象中,直到完成。

請求子產品==》響應資料适配子產品==》建立元件子產品==》單元測試

6)指令模式

将建立子產品的邏輯封裝在一個對象裡,這個對象提供一個參數化的請求接口,通過調用這個接口并傳遞參數實作對象内部的一些方法。

封裝功能,提供簡單而高效的API,解決指令的發起者和指令的執行者之間的耦合。

7)通路者模式

針對于對象結構中的元素,定義在不改變對象的前提下通路結構中元素的新方法。

8)中介者模式

通過中介者對象封裝一系列對象之間的互動,使對象之間不再互相引用,降低他們之間的耦合。

觀察者模式中的訂閱者是互相的,而中介者模式訂閱者是單向的,消息統一由中介者對象釋出,所有的訂閱者間接的被中介者管理。

9)備忘錄模式

在不破壞對象的封裝性的前提下,在對象之外捕獲并儲存該對象内部的狀态以便日後對象使用,或者對象恢複恢複到以前的某個狀态。

緩存資料,MVC中的M部分,很多時候都會緩存一些資料。

10)疊代器模式

在不暴露對象内部結構的同時,可以順序的通路聚合對象内部的元素。

疊代器是優化循環語句的一種可行方案,使得程式清晰易讀,解決了對象的使用者與對象内部結構之間的耦合。

1)委托模式

多個對象接收并處理同一請求,他們将請求委托給另一個對象統一處理請求。

委托父元素、預言未來、資料分發。

2)節流模式

對重複的業務進行節流控制,執行最後一次操作并取消其他操作,以提高性能。

節流器、圖檔延遲加載、統計打包。

3)簡單模版模式

通過格式化字元串拼湊出視圖,避免創造視圖時大量節點操作。

用正則比對方式去格式化字元串性能要遠高于拼接視圖執行性能。

包括三部分:字元串模版庫,格式化方法,字元串拼接操作。

4)惰性模式

減少每次代碼執行時的重複性分支判斷,通過對對象重定義來屏蔽原對象中的分支判斷。

惰性模式分為兩種:第一種檔案加載後立即執行對象方法來重定義,第二種是當第一次使用方法對象時來重定義。

5)參與者模式

在特定的作用域中執行給定的函數,并将參數原封不動地傳遞。

參與者模式是兩種技術的結晶,函數綁定和函數柯裡化。

6)等待者模式

通過對多個異步程序監聽,來觸發未來發生的動作。

等待者模式意在處理耗時比較長的操作,定時器操作、異步操作等。

在耗時操作内埋入監聽者對象,在某個時刻改變監聽者對象的狀态,當所有監聽者對象都是已完成的時候,執行完成回調,如果有一個是中斷,就執行中斷回調。

1)同步子產品

請求發出後,無論子產品是否存在,立即執行後續的邏輯,實作子產品開發中對子產品的立即使用。

2)異步子產品

AMD,請求發出後,繼續其他業務邏輯,直到子產品加載完成後執行後續的邏輯,實作子產品開發中對子產品加載完成後的引用。

3)MVC

用一種将業務邏輯、資料、視圖分離的方式組織架構代碼。

在視圖層建立界面的時候,會用到模型層内的資料,使這兩層耦合在一起。降低了視圖建立的靈活性和複用性。

4)MVP

View層不直接引用Model層的資料,而是通過Presenter層實作對Model層的資料通路。

所有層次的互動都發生在Presenter層中,解決View層和Model層之間的耦合。

但視圖層還不夠獨立,建立怎樣的視圖由Presenter控制。

5)MVVM

為View層量身訂做一套ViewMode層,并在ViewMode中建立屬性和方法,為View層綁定Model層的資料,并實作互動。

一個ViewMode可以對應多個View層或Model層,ViewMode中的代碼變得高度複用。

View層的獨立開發,可以使那些不懂JS的人,隻需了解HTML内容并按照View層規範格式,建立視圖,即可完成一個複雜的頁面開發。

    本文轉自 咖啡機(K.F.J)   部落格園部落格,原文連結:http://www.cnblogs.com/strick/p/5980539.html,如需轉載請自行聯系原作者

繼續閱讀