怎樣用Javascript實(shí)現(xiàn)建造者模式
概述
建造者模式是相對(duì)比較簡(jiǎn)單的一種設(shè)計(jì)模式,屬于創(chuàng)建型模式的一種;
定義:將一個(gè)復(fù)雜的對(duì)象分解成多個(gè)簡(jiǎn)單的對(duì)象來(lái)進(jìn)行構(gòu)建,將復(fù)雜的構(gòu)建層與表現(xiàn)層分離,使相同的構(gòu)建過(guò)程可以創(chuàng)建不同的表示模式;
優(yōu)點(diǎn):
- 建造者模式的封裝性比較好,創(chuàng)建對(duì)象和構(gòu)建過(guò)程解耦;
- 建造者模式很容易擴(kuò)展,當(dāng)我們需要擴(kuò)展的時(shí)候,通過(guò)一個(gè)新的建造者就可以實(shí)現(xiàn);
模式作用:
- 分步創(chuàng)建一個(gè)復(fù)雜的對(duì)象
- 解耦封裝過(guò)程和具體創(chuàng)建組件
- 無(wú)需關(guān)心組件如何組裝
注意事項(xiàng):
- 一定要一個(gè)穩(wěn)定的算法支持
- 加工工藝是暴露的,也就是說(shuō)土豪可以隨時(shí)去看房子建的怎么樣了
白話(huà)解釋?zhuān)?/p>
某土豪想建一個(gè)房子,某土豪只需要找包工頭,包工頭再去找施工團(tuán)隊(duì)來(lái)建造房子,而不需要土豪自己去一個(gè)個(gè)的找工人搭建施工團(tuán)隊(duì)開(kāi)始施工;包工頭知道土豪的需求,也知道哪里能找到工人搭建施工團(tuán)隊(duì),工人可以直接干活,中間節(jié)省了土豪直接和工人溝通的成本;土豪不需要知道房子該怎么建,土豪只需要最后能驗(yàn)收到房就行;
代碼實(shí)現(xiàn)
在寫(xiě)代碼之前我們先分析一下:
1、產(chǎn)出的東西是房子
2、包工頭調(diào)用工人進(jìn)行開(kāi)工而且他要很清楚工人們具體的某一個(gè)大項(xiàng)
3、工人是蓋房子的工人可以建臥室建客廳建廚房
4、包工頭只是一個(gè)接口,他只對(duì)外說(shuō)蓋房子,他不用做事情;
function Fangzi(){ this.woshi = ""; this.keting = ""; this.chufang = ""; } function Baogongtou(){ this.jianfangzi = function(gongren){ gongren.jian_woshi(); gongren.jian_keting(); gongren.jian_chufang(); } } function Gongren(){ this.jian_woshi = function(){ console.log("臥室建好了!"); } this.jian_keting = function(){ console.log("客廳建好了!"); } this.jian_chufang = function(){ console.log("廚房建好了!"); } this.wangong = function(){ var fangzi = new Fangzi(); fangzi.woshi = "ok"; fangzi.keting = "ok"; fangzi.chufang = "ok"; return fangzi; } } let gongren = new Gongren(); let baogongtou = new Baogongtou(); //臥室建好了! //客廳建好了! //廚房建好了! baogongtou.jianfangzi(gongren); var my_fangzi = gongren.wangong(); /* Fangzi={ chufang: "ok" keting: "ok" woshi: "ok" } */ console.log(my_fangzi);
上述代碼中我們可以看到,Gongren()里面是具體的施工過(guò)程,也就是具體做的事情,F(xiàn)angzi()里面一開(kāi)始都是空的,沒(méi)有客廳、廚房、臥室;Baogongtou()里面只是對(duì)外宣傳可以建房子,然后傳入工人方法調(diào)用工人進(jìn)行施工;工人方法執(zhí)行完了也就是施工完了,然后就是交房;一個(gè)新的方法里面實(shí)例化Fangzi()的方法,在新方法里面重新賦值即可;
以上就是怎樣用Javascript實(shí)現(xiàn)建造者模式的詳細(xì)內(nèi)容,更多關(guān)于Javascript建造者模式的資料請(qǐng)關(guān)注腳本之家其它相關(guān)文章!
- javascript設(shè)計(jì)模式 – 建造者模式原理與應(yīng)用實(shí)例分析
- JavaScript設(shè)計(jì)模式之建造者模式實(shí)例教程
- JavaScript的設(shè)計(jì)模式經(jīng)典之建造者模式
- JS建造者模式基本用法實(shí)例分析
- 深入理解JavaScript系列(27):設(shè)計(jì)模式之建造者模式詳解
- JavaScript設(shè)計(jì)模式之建造者模式介紹
- JS 設(shè)計(jì)模式之:工廠模式定義與實(shí)現(xiàn)方法淺析
- JS 設(shè)計(jì)模式之:?jiǎn)卫J蕉x與實(shí)現(xiàn)方法淺析
- javascript設(shè)計(jì)模式 – 訪問(wèn)者模式原理與用法實(shí)例分析
- javascript設(shè)計(jì)模式 – 模板方法模式原理與用法實(shí)例分析
相關(guān)文章
js實(shí)現(xiàn)input的賦值小結(jié)
這篇文章主要介紹了js實(shí)現(xiàn)input的賦值問(wèn)題小結(jié),在實(shí)際的開(kāi)發(fā)中,為了頁(yè)面的美觀,可能用到一些框架,比如EasyUI框架,文中介紹了easyui的input框賦值代碼,感興趣的朋友一起看看吧2023-12-12JS集合set類(lèi)的實(shí)現(xiàn)與使用方法示例
這篇文章主要介紹了JS集合set類(lèi)的實(shí)現(xiàn)與使用方法,結(jié)合具體實(shí)例形式分析了javascript集合的創(chuàng)建、元素添加、刪除以及并集、交集、補(bǔ)集等運(yùn)算相關(guān)操作技巧,需要的朋友可以參考下2019-02-02解決小程序無(wú)法觸發(fā)SESSION問(wèn)題
這篇文章主要介紹了解決小程序無(wú)法觸發(fā)SESSION問(wèn)題,本文給大家介紹的非常詳細(xì),具有一定的參考借鑒價(jià)值,需要的朋友可以參考下2020-02-02JS 實(shí)現(xiàn)請(qǐng)求調(diào)度器
這篇文章主要介紹了JS 實(shí)現(xiàn)請(qǐng)求調(diào)度器的方法,幫助大家更好的理解和學(xué)習(xí)使用js,感興趣的朋友可以了解下2021-03-03移動(dòng)端H5頁(yè)面返回并刷新頁(yè)面(BFcache)的方法
這篇文章主要給大家介紹了關(guān)于移動(dòng)端H5頁(yè)面返回并刷新頁(yè)面(BFcache)的相關(guān)資料,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2018-11-11JavaScript ES6中類(lèi)與模塊化管理超詳細(xì)講解
JavaScript中的模塊化是指將每個(gè)js文件會(huì)被認(rèn)為單獨(dú)一個(gè)的模塊。模塊之間是互相不可見(jiàn)的。如果一個(gè)模塊需要使用另一個(gè)模塊,那么需要通過(guò)指定語(yǔ)法來(lái)引入要使用的模塊,而且只能使用引入模塊所暴露的內(nèi)容2023-01-01