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

愛穿襯衫的程式設計師發表於2019-01-09

定義:

Builder模式是一步步建立一個複雜物件的建立型模式,它允許使用者在不知道內部構建細節的情況下,可以更精細地控制物件的構造流程。該模式是為了將構建複雜物件的過程和它的部件解耦,使得構建過程和部件的表示隔離開來。

使用場景:

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

UML類圖:

設計模式--建造者模式(Builder Pattern)
建造者模式的結構中還引入了一個指揮者類Director,該類的作用主要有兩個:一方面它隔離了客戶與生產過程;另一方面它負責控制產品的生成過程。指揮者針對抽象建造者程式設計,客戶端只需要知道具體建造者的型別,即可通過指揮者類呼叫建造者的相關方法,返回一個完整的產品物件。 在客戶端程式碼中,無須關心產品物件的具體組裝過程,只需確定具體建造者的型別即可,建造者模式將複雜物件 的構建與物件的表現分離開來,這樣使得同樣的構建過程可以建立出不同的表現。
在實際開發過程中,Director角色經常會被省略,而直接使用一個Builder來進行物件的組裝,者Builder通常為鏈式呼叫。

優點:

  • 在建造者模式中, 客戶端不必知道產品內部組成的細節,將產品本身與產品的建立過程解耦,使得相同的建立過程可以建立不同的產品物件。
  • 每一個具體建造者都相對獨立,而與其他的具體建造者無關,因此可以很方便地替換具體建造者或增加新的具體建造者, 使用者使用不同的具體建造者即可得到不同的產品物件 。
  • 可以更加精細地控制產品的建立過程。將複雜產品的建立步驟分解在不同的方法中,使得建立過程更加清晰,也更方便使用程式來控制建立過程。
  • 增加新的具體建造者無須修改原有類庫的程式碼,指揮者類針對抽象建造者類程式設計,系統擴充套件方便,符合“開閉原則”。

缺點:

  • 建造者模式所建立的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
  • 如果產品的內部變化複雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。

相關文章