理解JavaScript設計模式中的建造者模式
我們在前面已經(jīng)提過設計模式創(chuàng)建型模式的 3 種工廠模式 和 單例模式;本篇帶來同屬創(chuàng)建型模式的“建造者模式”
建造者模式(Builder Pattern)使用多個簡單的對象一步一步構建成一個復雜的對象。它提供了一種創(chuàng)建對象的最佳方式。
一個 Builder
類會一步一步構造最終的對象。該 Builder 類是獨立于其他對象的。
建造者模式:主要解決在軟件系統(tǒng)中,有時候面臨著"一個復雜對象"的創(chuàng)建工作,其通常由各個部分的子對象用一定的算法構成;由于需求的變化,這個復雜對象的各個部分經(jīng)常面臨著劇烈的變化,但是將它們組合在一起的算法卻相對穩(wěn)定。
它的優(yōu)點是:
- 1、建造者獨立,易擴展。
- 2、便于控制細節(jié)風險
缺點:
- 1、產(chǎn)品必須有共同點,范圍有限制。
- 2、如內(nèi)部變化復雜,會有很多的建造類。
當我們需要生成的對象具有復雜的內(nèi)部結構或需要生成的對象內(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)一指揮來組裝構建:
function director () { this.action = function (builder) { builder.nameBuilder(); builder.numberBuilder(); builder.wheelBuilder(); builder.engineBuilder(); } } var builder = new carBuilder(); // 構建類 var director = new director(); // 指揮構建 director.action(builder); // 應用構建 var Car = builder.getCar(); // 創(chuàng)建 console.log(Car);
建造者模式主要用于“分布構建一個復雜的對象”,它很容易進行擴展。如果有新的需求,通過實現(xiàn)一個新的建造者類就可以完成,并且建造者模式解耦了對象本身與構建過程,使得我們不用關心具體的建造過程。
要注意:與工廠模式的區(qū)別是:建造者模式更加關注與零件裝配的順序。
到此這篇關于理解JavaScript設計模式中的建造者模式的文章就介紹到這了,更多相關JS建造者模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!
相關文章
基于JS實現(xiàn)將JSON數(shù)據(jù)轉換為TypeScript類型聲明的工具
在TypeScript?項目中,我們經(jīng)常需要使用聲明一系列的ts類型。然而,手動寫的效率實在太低,本文就實現(xiàn)一個工具將?JSON?數(shù)據(jù)轉換為?TypeScript?類型定義,需要的可以參考一下2023-04-04