理解JavaScript設(shè)計(jì)模式中的建造者模式
我們在前面已經(jīng)提過設(shè)計(jì)模式創(chuàng)建型模式的 3 種工廠模式 和 單例模式;本篇帶來同屬創(chuàng)建型模式的“建造者模式”
建造者模式(Builder Pattern)使用多個(gè)簡單的對象一步一步構(gòu)建成一個(gè)復(fù)雜的對象。它提供了一種創(chuàng)建對象的最佳方式。
一個(gè) Builder
類會一步一步構(gòu)造最終的對象。該 Builder 類是獨(dú)立于其他對象的。
建造者模式:主要解決在軟件系統(tǒng)中,有時(shí)候面臨著"一個(gè)復(fù)雜對象"的創(chuàng)建工作,其通常由各個(gè)部分的子對象用一定的算法構(gòu)成;由于需求的變化,這個(gè)復(fù)雜對象的各個(gè)部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。
它的優(yōu)點(diǎn)是:
- 1、建造者獨(dú)立,易擴(kuò)展。
- 2、便于控制細(xì)節(jié)風(fēng)險(xiǎn)
缺點(diǎn):
- 1、產(chǎn)品必須有共同點(diǎn),范圍有限制。
- 2、如內(nèi)部變化復(fù)雜,會有很多的建造類。
當(dāng)我們需要生成的對象具有復(fù)雜的內(nèi)部結(jié)構(gòu)或需要生成的對象內(nèi)部屬性本身相互依賴時(shí),會借助它來解決問題;
實(shí)戰(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)建一個(gè)復(fù)雜的對象”,它很容易進(jìn)行擴(kuò)展。如果有新的需求,通過實(shí)現(xiàn)一個(gè)新的建造者類就可以完成,并且建造者模式解耦了對象本身與構(gòu)建過程,使得我們不用關(guān)心具體的建造過程。
要注意:與工廠模式的區(qū)別是:建造者模式更加關(guān)注與零件裝配的順序。
到此這篇關(guān)于理解JavaScript設(shè)計(jì)模式中的建造者模式的文章就介紹到這了,更多相關(guān)JS建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
Bootstrap導(dǎo)航條可點(diǎn)擊和鼠標(biāo)懸停顯示下拉菜單
這篇文章主要為大家詳細(xì)介紹了Bootstrap導(dǎo)航條可點(diǎn)擊和鼠標(biāo)懸停顯示下拉菜單,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-11-11JavaScript 隨機(jī)驗(yàn)證碼的生成實(shí)例代碼
這篇文章主要介紹了JavaScript 隨機(jī)驗(yàn)證碼的生成實(shí)例代碼的相關(guān)資料,需要的朋友可以參考下2016-09-09基于JS實(shí)現(xiàn)將JSON數(shù)據(jù)轉(zhuǎn)換為TypeScript類型聲明的工具
在TypeScript?項(xiàng)目中,我們經(jīng)常需要使用聲明一系列的ts類型。然而,手動寫的效率實(shí)在太低,本文就實(shí)現(xiàn)一個(gè)工具將?JSON?數(shù)據(jù)轉(zhuǎn)換為?TypeScript?類型定義,需要的可以參考一下2023-04-04JS時(shí)間轉(zhuǎn)換標(biāo)準(zhǔn)格式、時(shí)間戳轉(zhuǎn)換標(biāo)準(zhǔn)格式的示例代碼
這篇文章主要介紹了JS時(shí)間轉(zhuǎn)換標(biāo)準(zhǔn)格式、時(shí)間戳轉(zhuǎn)換標(biāo)準(zhǔn)格式的示例代碼,本文通過實(shí)例代碼給大家介紹的非常詳細(xì),對大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2023-05-05js實(shí)現(xiàn)無縫滾動圖(可控制當(dāng)前滾動的方向)
本文主要分享了js實(shí)現(xiàn)無縫滾動圖的示例代碼,這個(gè)版本可以控制左右滾動,鼠標(biāo)點(diǎn)擊對應(yīng)的廣告會自動滑動把廣告完全展示出來,當(dāng)鼠標(biāo)離開,接著繼續(xù)滾動。具有很好的參考價(jià)值,下面跟著小編一起來看下吧2017-02-02利用PHP實(shí)現(xiàn)遞歸刪除鏈表元素的方法示例
這篇文章主要給大家介紹了關(guān)于如何利用PHP實(shí)現(xiàn)遞歸刪除鏈表元素的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-10-10