設計模式系列之四:建造者模式
阿新 • • 發佈:2019-02-11
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.優缺點
優點
- 易於解耦,將產品本身與產品建立過程進行解耦,可以使用相同的建立過程來得到不同的產品。也就說細節依賴抽象。
- 建造者獨立,容易擴充套件。
- 便於控制細節風險。由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。
缺點
- 建造者模式所建立的產品一般具有較多的共同點,其組成部分相似;如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
- 如果產品的內部變化複雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。