建造者模式是相對比較簡單的一種設(shè)計模式,屬于創(chuàng)建型模式的一種;
定義:將一個復(fù)雜的對象分解成多個簡單的對象來進行構(gòu)建,將復(fù)雜的構(gòu)建層與表現(xiàn)層分離,使相同的構(gòu)建過程可以創(chuàng)建不同的表示模式;
? ?優(yōu)點:
* 建造者模式的封裝性比較好,創(chuàng)建對象和構(gòu)建過程解耦;
* 建造者模式很容易擴展,當我們需要擴展的時候,通過一個新的建造者就可以實現(xiàn);
?
?
模式作用:
* 分步創(chuàng)建一個復(fù)雜的對象?
* 解耦封裝過程和具體創(chuàng)建組件
* 無需關(guān)心組件如何組裝
注意事項:
* 一定要一個穩(wěn)定的算法支持
* 加工工藝是暴露的,也就是說土豪可以隨時去看房子建的怎么樣了
白話解釋:
某土豪想建一個房子,某土豪只需要找包工頭,包工頭再去找施工團隊來建造房子,而不需要土豪自己去一個個的找工人搭建施工團隊開始施工;包工頭知道土豪的需求,也知道哪里能找到工人搭建施工團隊,工人可以直接干活,中間節(jié)省了土豪直接和工人溝通的成本;土豪不需要知道房子該怎么建,土豪只需要最后能驗收到房就行;
?
在寫代碼之前我們先分析一下:
? ? 1、產(chǎn)出的東西是房子 ? ? 2、包工頭調(diào)用工人進行開工?而且他要很清楚工人們具體的某一個大項 ? ?
3、工人是蓋房子的?工人可以建臥室??建客廳?建廚房 ? ? 4、包工頭只是一個接口,他只對外說蓋房子,他不用做事情; 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()里面是具體的施工過程,也就是具體做的事情,F(xiàn)angzi()里面一開始都是空的,沒有客廳、廚房、臥室;Baogongtou()里面只是對外宣傳可以建房子,然后傳入工人方法調(diào)用工人進行施工;工人方法執(zhí)行完了也就是施工完了,然后就是交房;一個新的方法里面實例化Fangzi()的方法,在新方法里面重新賦值即可;
熱門工具 換一換