設計模式--建造者模式(Builder Pattern)

定義:

Builder模式是一步步建立一個複雜對象的建立型模式,它容許用戶在不知道內部構建細節的狀況下,能夠更精細地控制對象的構造流程。該模式是爲了將構建複雜對象的過程和它的部件解耦,使得構建過程和部件的表示隔離開來。編程

使用場景:

將一個複雜對象的構建與它的表示分離,使得一樣的構建過程能夠建立不一樣的表示。ui

UML類圖:

建造者模式的結構中還引入了一個指揮者類Director,該類的做用主要有兩個:一方面它隔離了客戶與生產過程;另外一方面它負責控制產品的生成過程。指揮者針對抽象建造者編程,客戶端只須要知道具體建造者的類型,便可經過指揮者類調用建造者的相關方法,返回一個完整的產品對象。 在客戶端代碼中,無須關心產品對象的具體組裝過程,只需肯定具體建造者的類型便可,建造者模式將複雜對象 的構建與對象的表現分離開來,這樣使得一樣的構建過程能夠建立出不一樣的表現。
在實際開發過程當中,Director角色常常會被省略,而直接使用一個Builder來進行對象的組裝,者Builder一般爲鏈式調用。

優勢:

  • 在建造者模式中, 客戶端沒必要知道產品內部組成的細節,將產品自己與產品的建立過程解耦,使得相同的建立過程能夠建立不一樣的產品對象。
  • 每個具體建造者都相對獨立,而與其餘的具體建造者無關,所以能夠很方便地替換具體建造者或增長新的具體建造者, 用戶使用不一樣的具體建造者便可獲得不一樣的產品對象 。
  • 能夠更加精細地控制產品的建立過程。將複雜產品的建立步驟分解在不一樣的方法中,使得建立過程更加清晰,也更方便使用程序來控制建立過程。
  • 增長新的具體建造者無須修改原有類庫的代碼,指揮者類針對抽象建造者類編程,系統擴展方便,符合「開閉原則」。

缺點:

  • 建造者模式所建立的產品通常具備較多的共同點,其組成部分類似,若是產品之間的差別性很大,則不適合使用建造者模式,所以其使用範圍受到必定的限制。
  • 若是產品的內部變化複雜,可能會致使須要定義不少具體建造者類來實現這種變化,致使系統變得很龐大。
相關文章
相關標籤/搜索