1. 程式人生 > >設計模式簡單介紹(java語言)-- 建造者模式

設計模式簡單介紹(java語言)-- 建造者模式

設計模式簡單介紹(java語言)– 建造者模式

1. 建造者模式的定義

建造者模式也叫做生成器模式,其定義如下:
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
通用類圖:
這裡寫圖片描述

在建造者模中,通常有如下4個角色:
Product產品類
通常是實現了模板方法模式,也就是有模板方法和基本方法,參考模板方法模式介紹。
Builder抽象建造者
規範產品的組建,一般由子類實現。
ConcreteBuilder具體建造者
實現抽象定義的所有方法,並且返回一個組建好的物件。
Director導演類
負責安排已有的模板的順序,然後告訴builder開始建造。

2. 通用原始碼

產品類:

public class Product {

    public void doSomeThing(){
        //獨立的業務處理
    }
}

抽象建造者:

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

其中,setpart方法是零件的配置,什麼是零件?其他的物件,獲得一個不同的零件,或者不同的裝配順序就可能產生不同的產品。

具體建造者:

public class ConcreteProduct extends Builder {
    private Product product = new Product();

    //組建一個產品
    @Override
    public Product builderPrroduct() {
        return product;
    }

    //設定產品的零件
    @Override
    public void setPart() {
        /**
         * 產品類內的邏輯處理
         */
    }
}

需要注意的是,如果有多個產品類就有幾個具體的建造者,而且這多個產品類具有相同的介面或者抽象類。

導演類:

public class Director {
    private Builder builder = new ConcreteProduct();

    public Product getAProduct(){
        builder.setPart();
        /**
         * 設定不同的零件,產生不同的產品
         */

        return builder.builderPrroduct();
    }
}

3.使用建造者模式的場景和優缺點

使用場景
當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。
相同的方法,不同的執行順序,產生不同的事件結果時。
多個部件或零件,都可以裝配到一個物件中,但是產生的執行結果又不相同時。
產品類非常複雜,或者產品類中的呼叫順序不同產生了不同的效能。
建立一些複雜的物件時,這些物件的內部組成構件間的建造順序是穩定的,但是物件的內部組成構件面臨著複雜的變化。
優缺點
優點:
使用建造者模式可以使客戶端不必知道產品內部組成的細節。
具體的建造者類之間是相互獨立的,容易擴充套件。
由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。
缺點:
產生多餘的Build物件以及Dirextor類。