定義:建造者設(shè)計(jì)模式屬于創(chuàng)建型設(shè)計(jì)模式。將一個(gè)復(fù)雜對象的構(gòu)建與它的表示分離,使得同樣的構(gòu)建過程可以創(chuàng)建不同的表示之拨。
建造者結(jié)構(gòu)圖:
在建造者模式中有如下角色:
- Product:產(chǎn)品類
- Builder:build建造者類央勒,通過它構(gòu)建產(chǎn)品類
demo&代碼
public class Computer {
private String cpu;
private String ram;
private String mainboard;
private Computer(Builder builder) {
setCpu(builder.cpu);
setRam(builder.ram);
setMainboard(builder.mainboard);
}
public String getCpu() {
return cpu;
}
public void setCpu(String cpu) {
this.cpu = cpu;
}
public String getRam() {
return ram;
}
public void setRam(String ram) {
this.ram = ram;
}
public String getMainboard() {
return mainboard;
}
public void setMainboard(String mainboard) {
this.mainboard = mainboard;
}
@Override
public String toString() {
return (cpu!=null?("cpu:" + cpu):"") + (ram!=null?(" ,ram" + ram):"") + (mainboard!=null?(" ,mainboard" + mainboard):"");
}
static class Builder {
private String cpu;
private String ram;
private String mainboard;
public Builder cpu(String val) {
cpu = val;
return this;
}
public Builder ram(String val) {
ram = val;
return this;
}
public Builder mainboard(String val) {
mainboard = val;
return this;
}
public Computer build() {
return new Computer(this);
}
}
}
使用場景
- 當(dāng)創(chuàng)建復(fù)雜對象的算法應(yīng)該獨(dú)立于該對象的組成部分以及它們的裝配方式時(shí)。
- 遇到多個(gè)構(gòu)造器參數(shù)時(shí)要考慮用構(gòu)建器葱跋。靜態(tài)工廠和構(gòu)造器有個(gè)共同的局限性:它們都不能很好地?cái)U(kuò)展到大量的可選參數(shù)持寄。
優(yōu)點(diǎn)
- 使用建造者模式可以使客戶端不必知道產(chǎn)品內(nèi)部組成細(xì)節(jié)。
- 具體的建造者之間是互相獨(dú)立的娱俺, 容易擴(kuò)展稍味。
- 由于具體的建造者是獨(dú)立的, 因此可以對建造過程逐步細(xì)化矢否,而不對其他的模塊產(chǎn)生任何影響仲闽。
缺點(diǎn)
- 產(chǎn)生多余的Build對象
代碼已上傳github