理解JavaScript設(shè)計模式中的建造者模式
我們在前面已經(jīng)提過設(shè)計模式創(chuàng)建型模式的 3 種工廠模式 和 單例模式;本篇帶來同屬創(chuàng)建型模式的“建造者模式”

建造者模式(Builder Pattern)使用多個簡單的對象一步一步構(gòu)建成一個復(fù)雜的對象。它提供了一種創(chuàng)建對象的最佳方式。
一個 Builder 類會一步一步構(gòu)造最終的對象。該 Builder 類是獨立于其他對象的。
建造者模式:主要解決在軟件系統(tǒng)中,有時候面臨著"一個復(fù)雜對象"的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構(gòu)成;由于需求的變化,這個復(fù)雜對象的各個部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。
它的優(yōu)點是:
- 1、建造者獨立,易擴展。
- 2、便于控制細節(jié)風(fēng)險
缺點:
- 1、產(chǎn)品必須有共同點,范圍有限制。
- 2、如內(nèi)部變化復(fù)雜,會有很多的建造類。
當(dāng)我們需要生成的對象具有復(fù)雜的內(nèi)部結(jié)構(gòu)或需要生成的對象內(nèi)部屬性本身相互依賴時,會借助它來解決問題;
實戰(zhàn)舉例:
比如說,我們要建造一輛車:
function car () {
this.name = '',
this.number = '',
this.wheel = '',
this.engine = ''
}車由名字、車牌號、輪子、引擎組成;
然后,我們在建造類中分門別類建造他們:
function carBuilder () {
this.nameBuilder = function () {
this.name = '寶馬'
},
this.numberBuilder = function () {
this.number = '88888888'
},
this.wheelBuilder = function () {
this.wheel = '米其林輪胎'
},
this.engineBuilder = function () {
this.engine = 'V8引擎'
},
this.getCar = function () {
var Car = new car()
Car.name = this.name;
Car.number= this.number;
Car.wheel = this.wheel;
Car.engine = this.engine;
return Car;
}
}然后,再統(tǒng)一指揮來組裝構(gòu)建:
function director () {
this.action = function (builder) {
builder.nameBuilder();
builder.numberBuilder();
builder.wheelBuilder();
builder.engineBuilder();
}
}
var builder = new carBuilder(); // 構(gòu)建類
var director = new director(); // 指揮構(gòu)建
director.action(builder); // 應(yīng)用構(gòu)建
var Car = builder.getCar(); // 創(chuàng)建
console.log(Car);建造者模式主要用于“分布構(gòu)建一個復(fù)雜的對象”,它很容易進行擴展。如果有新的需求,通過實現(xiàn)一個新的建造者類就可以完成,并且建造者模式解耦了對象本身與構(gòu)建過程,使得我們不用關(guān)心具體的建造過程。
要注意:與工廠模式的區(qū)別是:建造者模式更加關(guān)注與零件裝配的順序。
到此這篇關(guān)于理解JavaScript設(shè)計模式中的建造者模式的文章就介紹到這了,更多相關(guān)JS建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
uniapp發(fā)送formdata表單請求2種方法(全網(wǎng)最簡單方法)
這篇文章主要給大家介紹了關(guān)于uniapp發(fā)送formdata表單請求2種方法的相關(guān)資料,本文介紹的方法應(yīng)該是全網(wǎng)最簡單方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下2023-09-09
兩個JavaScript jsFiddle JSBin在線調(diào)試器
這兩個工具都是剛誕生不久,都還在不斷完善中,雖然目前jsFiddle要優(yōu)于JS Bin,但是我還是更看好后者2010-03-03
javascript和jquery中cookie的設(shè)置方法
Cookie 是瀏覽器訪問服務(wù)器后,服務(wù)器傳給瀏覽器的一段數(shù)據(jù)。瀏覽器需要保存這段數(shù)據(jù),不會輕易刪除(保存在計算機中)。此后每次瀏覽器訪問該服務(wù)器,都必須帶上這段數(shù)據(jù)。這篇文章主要介紹了javascript和jquery中cookie的設(shè)置方法2023-07-07
javascript中的window.location.search方法簡介
window.location.search方法是截取當(dāng)前url中“?”后面的字符串,示例如下,感興趣的朋友可以參考下2013-09-09
Webpack打包過程中處理ES6模塊的循環(huán)依賴問題小結(jié)
Webpack通過“暫時性引用”特性處理ES6模塊的循環(huán)依賴,即在模塊加載時創(chuàng)建占位符,確保模塊能夠正確加載,本文介紹Webpack打包過程中如何處理ES6模塊的循環(huán)依賴,感興趣的朋友一起看看吧2025-02-02
淺談JS 數(shù)字和字符串之間相互轉(zhuǎn)化的糾紛
下面小編就為大家?guī)硪黄獪\談JS 數(shù)字和字符串之間相互轉(zhuǎn)化的糾紛。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧2017-10-10

