JavaScript 設(shè)計模式的分類

2018-08-02 16:23 更新

設(shè)計模式的分類

設(shè)計模式的種類

在眾所周知的設(shè)計書《Domain-Driven Terms》中,它被描述為:

“設(shè)計模式是命名、抽象和識別對可重用的面向?qū)ο笤O(shè)計有用的的通用設(shè)計結(jié)構(gòu)。設(shè)計模式確定類和他們的實(shí)體、他們的角色和協(xié)作、還有他們的責(zé)任分配。

每一個設(shè)計模式都聚焦于一個面向?qū)ο蟮脑O(shè)計難題或問題。它描述了在其它設(shè)計的約束下它能否使用,使用它后的后果和得失。因為我們必須最終實(shí)現(xiàn)我們的設(shè)計模式,所以每個設(shè)計模式都提供了例子..代碼來對實(shí)現(xiàn)進(jìn)行闡釋。

雖然設(shè)計模式被描述為面向?qū)ο蟮脑O(shè)計,它們基于那些已經(jīng)被主流面向?qū)ο笳Z言實(shí)現(xiàn)過的解決方案...”

設(shè)計模式可以被分成幾個不同的種類。在這個部分我們將復(fù)習(xí)三個分類,并且在我們進(jìn)入特定的設(shè)計模式詳情之前我們提到該分組下的模式的幾個示例。

創(chuàng)建型設(shè)計模式

創(chuàng)建型設(shè)計模式關(guān)注于對象創(chuàng)建的機(jī)制方法,通過該方法,對象以適應(yīng)工作環(huán)境的方式被創(chuàng)建。基本的對象創(chuàng)建方法可能會給項目增加額外的復(fù)雜性,而這些模式的目的就是為了通過控制創(chuàng)建過程解決這個問題。

屬于這一類的一些模式是:構(gòu)造器模式(Constructor),工廠模式(Factory),抽象工廠模式 (Abstract),原型模式 (Prototype),單例模式 (Singleton)以及 建造者模式(Builder)。

結(jié)構(gòu)設(shè)計模式

結(jié)構(gòu)模式關(guān)注于對象組成和通常識別的方式實(shí)現(xiàn)不同對象之間的關(guān)系。該模式有助于在系統(tǒng)的某一部分發(fā)生改變的時候,整個系統(tǒng)結(jié)構(gòu)不需要改變。該模式同樣有助于對系統(tǒng)中某部分沒有達(dá)到某一目的的部分進(jìn)行重組。

在該分類下的模式有:裝飾模式,外觀模式,享元模式,適配器模式和代理模式。

行為設(shè)計模式

行為模式關(guān)注改善或精簡在系統(tǒng)中不同對象間通信。

行為模式包括:迭代模式,中介者模式,觀察者模式和訪問者模式。

設(shè)計模式的分類

在我早起學(xué)習(xí)設(shè)計模式的經(jīng)驗中,我個人發(fā)現(xiàn),下面的表格是一個非常有用的提醒,大多數(shù)模式所提供-它覆蓋了由GOF提出的23種模式。最早的表格由 Elyse Nielsen 在2004年匯總,我已經(jīng)做了部分修改以適應(yīng)我們的討論。 我推薦使用該表格作為參考,但要記住大量額外的模式在這里么有提及,但在本書的后續(xù)的章節(jié)中會提到。

關(guān)于類的簡單說明

要記住這張表中會有模式引用“類”的概念。JavaScript是一種弱類型語言,不過類可以通過函數(shù)模擬出來。 最常見的實(shí)現(xiàn)這一點(diǎn)的方法,是先定義一個JavaScript函數(shù),然后再使用這個新的關(guān)鍵字創(chuàng)建一個對象??梢酝ㄟ^這種方法像下面這樣給類定義新的屬性與方法。

// A car "class"
function Car( model ) {

  this.model = model;
  this.color = "silver";
  this.year  = "2012";

  this.getInfo = function () {
    return this.model + " " + this.year;
  };

}

接著我們可以使用上面定義的Car構(gòu)造函數(shù)實(shí)例化對象,就像這樣:

var myCar = new Car("ford");

myCar.year = "2010";

console.log( myCar.getInfo() );

更多使用JavaScript定義“類”的方法,參見Stoyan Stefanov的關(guān)于這些的有用帖子。

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號