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

2018-08-02 16:23 更新

設(shè)計(jì)模式的分類

設(shè)計(jì)模式的種類

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

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

每一個(gè)設(shè)計(jì)模式都聚焦于一個(gè)面向?qū)ο蟮脑O(shè)計(jì)難題或問(wèn)題。它描述了在其它設(shè)計(jì)的約束下它能否使用,使用它后的后果和得失。因?yàn)槲覀儽仨氉罱K實(shí)現(xiàn)我們的設(shè)計(jì)模式,所以每個(gè)設(shè)計(jì)模式都提供了例子..代碼來(lái)對(duì)實(shí)現(xiàn)進(jìn)行闡釋。

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

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

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

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

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

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

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

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

行為設(shè)計(jì)模式

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

行為模式包括:迭代模式,中介者模式,觀察者模式和訪問(wèn)者模式。

設(shè)計(jì)模式的分類

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

關(guān)于類的簡(jiǎn)單說(shuō)明

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

// 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í)例化對(duì)象,就像這樣:

var myCar = new Car("ford");

myCar.year = "2010";

console.log( myCar.getInfo() );

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

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

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)