定義:建造者設計模式屬於建立型設計模式。將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
建造者結構圖:
在建造者模式中有如下角色:
- Product:產品類
- Builder:build建造者類,通過它構建產品類
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);
}
}
}
複製程式碼
使用場景
- 當建立複雜物件的演算法應該獨立於該物件的組成部分以及它們的裝配方式時。
- 遇到多個構造器引數時要考慮用構建器。靜態工廠和構造器有個共同的侷限性:它們都不能很好地擴充套件到大量的可選引數。
優點
- 使用建造者模式可以使客戶端不必知道產品內部組成細節。
- 具體的建造者之間是互相獨立的, 容易擴充套件。
- 由於具體的建造者是獨立的, 因此可以對建造過程逐步細化,而不對其他的模組產生任何影響。
缺點
- 產生多餘的Build物件
程式碼已上傳github