Javascript設計模式——建造者模式

  • 2019 年 10 月 12 日
  • 筆記

  建造者模式是相對比較簡單的一種設計模式,屬於創建型模式的一種;

  定義:將一個複雜的對象分解成多個簡單的對象來進行構建,將複雜的構建層與表現層分離,使相同的構建過程可以創建不同的表示模式;

    優點:

  1. 建造者模式的封裝性比較好,創建對象和構建過程解耦;
  2. 建造者模式很容易擴展,當我們需要擴展的時候,通過一個新的建造者就可以實現;

 

 

  模式作用:

  1. 分步創建一個複雜的對象 
  2. 解耦封裝過程和具體創建組件    
  3. 無需關心組件如何組裝

  注意事項:

  1. 一定要一個穩定的演算法支援  
  2. 加工製程是暴露的,也就是說土豪可以隨時去看房子建的怎麼樣了

  白話解釋:

  某土豪想建一個房子,某土豪只需要找包工頭,包工頭再去找施工團隊來建造房子,而不需要土豪自己去一個個的找工人搭建施工團隊開始施工;包工頭知道土豪的需求,也知道哪裡能找到工人搭建施工團隊,工人可以直接幹活,中間節省了土豪直接和工人溝通的成本;土豪不需要知道房子該怎麼建,土豪只需要最後能驗收到房就行;

 

在寫程式碼之前我們先分析一下:

    1、產出的東西是房子
    2、包工頭調用工人進行開工 而且他要很清楚工人們具體的某一個大項
    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()裡面是具體的施工過程,也就是具體做的事情,Fangzi()裡面一開始都是空的,沒有客廳、廚房、卧室;Baogongtou()裡面只是對外宣傳可以建房子,然後傳入工人方法調用工人進行施工;工人方法執行完了也就是施工完了,然後就是交房;一個新的方法裡面實例化Fangzi()的方法,在新方法裡面重新賦值即可;