天天看點

建造者(生成器)模式

将一個複雜對象的建構與它的表示分離,使得同樣的建構過程可以建立不同的表示

簡述

建造者模式将用戶端與包含多個組成部分的複雜對象的建立過程分離,用戶端無需知道複雜對象的内部組成部分與裝配方式,隻需知道建造者的類型即可。

模式結構

建造者(生成器)模式
  • Builder(抽象建造者):抽象建造者為建立一個産品Product對象的各個部件指定抽象接口,在該接口中一般聲明兩類方法,一類方法是buildPartX(),他們用于建立複雜對象的各個部件;另一類方法是getResult(),用于傳回複雜對象。它可以使抽象類,還可以是接口。
  • ConcreteBuilder(具體建造者):實作Builder接口,實作各個部件的構造和裝配方法,定義并明确它所建立的複雜對象,也可以提供一個方法傳回建立好的地複雜産品對象。
  • Product(産品角色):産品角色是被建構的複雜對象吧,包含多個組成部件,具體建造者建立該産品的内部表示并定義他的裝配過程。
  • Director(指揮者):負責安排複雜對象的建造次序,指揮者與抽象建造者之間存在關聯關系,可以在其construct()建造方法中調用建造者對象的部件建構與裝配方法,完成複雜對象的建造。用戶端一般隻需要與指揮者進行互動,在用戶端确定具體建造者的類型,并執行個體化具體建造者對象,然後通過指揮者類的構造函數或者set方法将該對象傳入指揮者類中。

用戶端代碼片段

Builder builder= new ConcreteBuilder();
Director director=new Director(builder);
Product producter=director.construct();
           

優缺點

優點

  • 用戶端不必知道内部細節,将産品本身與産品的建立過程解耦,使得相同的建立過程可以建立不同的的産品對象。
  • 每一個具體建造者都相對獨立,與其他的的具體建造者無關,是以恨意很容易增加新的建造者。
  • 可以更加精細的控制産品的建立過程
  • 增加新的建造者無需修改原有代碼,指揮者類針對抽象層程式設計。系統擴充友善。

缺點

  • 所建立的産品一般具有較多的共同點,組成部分相似,如果産品差異很大,則不适用。
  • 如果産品内部變化很複雜,可能會導緻需要定義很多具體建造者來實作這種變化,導緻系統很龐大。

繼續閱讀