一、建造者模式的定義
定義如下:
Separate the construction of a complex object from its representation so that the same construction process can create different representations(將一個複雜對象的構建與它的表示相分離,使得同樣的構建過程可以創建不同的表示)。
通用類圖:
在建造者模式中,有如下4個角色:
Product產品類:通常是實現了模板方法模式,也就是有模板方法和基本方法
Builder抽象建造者:規範產品的組建,一般由子類實現。
ConcreteBuilder具體建造者:實現抽象類定義的所有方法,並且返回一個組建好的對象。
Director導演類:負責安排已有模塊的順序,然後告訴Builder開始建造。
產品類:
public class Product {
public void doSomething() {
}
}
抽象建造者:
public abstract class Builder {
public abstract void setPart();
public abstract Product buildProduct();
}
具體建造者:
public class ConcreteBuilder extends Builder {
private Product product = new Product();
@Override
public void setPart() {
}
@Override
public Product buildProduct() {
return product;
}
}
導演類:
public class Director {
private Builder builder = new ConcreteBuilder();
public Product getAProduct() {
builder.setPart();
return builder.buildProduct();
}
}
二、建造者模式的優缺點
優點:
封裝性:使用建造者可以使客戶端不必知道產品內部組成的細節。
建造者獨立,容易擴展
便於控制細節風險:由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響
使用場景:
相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式
多個部件或零件,都可以在、裝配到一個對象中,但是產生的運行結果又不相同,則可以使用該模式
產品類非常複雜,或者產品類中的調用順序不同產生了不同的效能,這個時候使用建造者模式非常合適。
在對象創建過程中會使用系統中的一些其他對象,這些對象在產品對象的創建過程中不易得到時,也可以採用建造者模式封裝該對象的創建過程。