1. 定義
建造者模式也叫做生成器模式霎俩。將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創(chuàng)建不同的表示。
構建者模式
2. 使用場景
- 相同的方法脆栋,不同的執(zhí)行順序,產(chǎn)生不同的事件結果時洒擦,可以采用建造者模式椿争。
- 多個部件或零件,都可以裝配到一個對象中熟嫩,但是產(chǎn)生的運行結果又不相同時秦踪,則可以使用該模式。
- 產(chǎn)品類非常復雜,或者產(chǎn)品類中的調用順序不同產(chǎn)生了不同的效能椅邓,這個時候使用建造者模式非常合適舍扰。
- 在對象創(chuàng)建過程中會使用到系統(tǒng)中的一些其他對象,這些對象在產(chǎn)品對象的創(chuàng)建過程中不易得到時希坚,也可以采用建造者模式封裝該對象的創(chuàng)建過程边苹。該種場景只能是一個補償方法,因為一個對象不容易獲得裁僧,而在設計階段竟然沒有發(fā)覺个束,而要通過創(chuàng)建者模式柔化創(chuàng)建過程,本身已經(jīng)違反設計的最初目標聊疲。
- Android當中的Dialog.Builder茬底、一些常見的框架的初始化等等,都是采用構建者模式
3. 實現(xiàn)
設計模式只是純理論获洲,具體實現(xiàn)有多種變化阱表。下面以最常見的連點調用為例子:
public class Product {
private String mPartA;
private String mPartB;
private String mPartC;
public static class Builder{
Product mProduct;
public Builder() {
this.mProduct = new Product();
}
public Builder buildPartA(String partA) {
this.mProduct.mPartA = partA;
return this;
}
public Builder buildPartB(String partB) {
this.mProduct.mPartB = partB;
return this;
}
public Builder buildPartC(String partC) {
this.mProduct.mPartC = partC;
return this;
}
public Product build() {
return mProduct;
}
}
public static void main(String[] args) {
Product product = new Product.Builder()
.buildPartA("a")
.buildPartB("b")
.buildPartC("c")
.build();
}
}
4. 優(yōu)點
封裝性:使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成的細節(jié)。
建造者相互獨立贡珊,容易擴展
便于控制細節(jié)風險:由于具體的建造者是獨立的最爬,因此可以對建造過程逐步細化,而不對其他的模塊產(chǎn)生任何影響门岔。
5. 缺點
產(chǎn)生多余的Builder對象爱致,浪費內(nèi)存