W3Cschool
恭喜您成為首批注冊(cè)用戶
獲得88經(jīng)驗(yàn)值獎(jiǎng)勵(lì)
在眾所周知的設(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ì)模式關(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)模式關(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)行重組。
在該分類下的模式有:裝飾模式,外觀模式,享元模式,適配器模式和代理模式。
行為模式關(guān)注改善或精簡(jiǎn)在系統(tǒng)中不同對(duì)象間通信。
行為模式包括:迭代模式,中介者模式,觀察者模式和訪問(wèn)者模式。
在我早起學(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ì)提到。
要記住這張表中會(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)于這些的有用帖子。
Copyright©2021 w3cschool編程獅|閩ICP備15016281號(hào)-3|閩公網(wǎng)安備35020302033924號(hào)
違法和不良信息舉報(bào)電話:173-0602-2364|舉報(bào)郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號(hào)
聯(lián)系方式:
更多建議: