1. 程式人生 > >設計模式系列之四:建造者模式

設計模式系列之四:建造者模式

1.定義

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

2.通用類圖

  • Product 產品類:表示被構造的複雜物件。通常實現了模板方法模式,也就是有基本方法和模板方法
  • Builder 抽象建造者:規範產品的元件,一般由子類實現
  • ConcreteBuilder具體建造者:實現抽象類定義的所有方法,並且返回一個元件好的物件
  • Director導演類:負責安排已有模組的順序,然後告訴builder開始建造

3.通用原始碼

產品類

public class Product {
   public void doSomething() {
       //獨立業務處理
} }

抽象建造者

public abstract class Builder {
   //設定產品的不同部分,以獲得不同的產品
    public abstract void setPart();
    //建造產品
    public abstract Product buildProduct();
}

其中,setPart方法是零件的配置,不同的零件,不同的組裝順序就能產生不同的產品。
具體建造者

public class ConcreteBuilder extends Builder {

    private Product product = new Product();
    //設定產品零件
public void setPart() { //產品類內的邏輯處理 } //組建一個產品 public Product buildProduct() { return product; } }

注意:如果有多個產品類就有多個具體的建造者,而且這多個產品類具有相同的介面或抽象類
導演類

public class Director {
    private Builder builder = new ConcreteBuilder();
    //構建不同的產品
    public Product getAProduct
() { builder.setPart(); //設定不同的零件,產生不同的產品 return builder.buildProduct(); } }

導演類起到封裝作用,避免高層模組深入到建造者內部的實現類。當建造者模式比較龐大時,導演類可以有多個。

4.Demo

5.應用場景

  • 相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式
  • 多個部件或零件,都可以裝配到一個物件中,但是產生的執行結果又不相同時,則可以使用該模式
  • 產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的效能
  • 在物件建立的過程中會使用到系統中的一些其他物件,這些物件在產品物件的建立過程中不易得到時。

6.優缺點

優點

  • 易於解耦,將產品本身與產品建立過程進行解耦,可以使用相同的建立過程來得到不同的產品。也就說細節依賴抽象。
  • 建造者獨立,容易擴充套件。
  • 便於控制細節風險。由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。

缺點

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