一、簡介
工廠類模式提供的是創建單個類的模式,而建造者模式則是將各種產品集中起來管理,用來創建複合對象,所謂複合對象就是指某個類具有不同的屬性;
二、四個角色說明
Product產品類:通常是實現了模板方法模式,也就是有模板方法和基本方法;
Builder抽象建造者:規範產品的組建,一般是由子類實現;
ConcreteBuilder具體建造者:實現抽象類定義的所有方法,並且返回一個組建好的對象;
Director導演類:負責安排已有模塊的順序,然後告訴Builder開始建造‘’
三、代碼演示
抽象建造者Builder:
package com.zibo.design_mode.builder;
//裝機人員裝機的抽象方法-相當於是一個約束,必須具備這些內容
public abstract class Builder {
//裝CPU
public abstract void buildCPU();
//裝主板
public abstract void buildMainBoard();
//裝鍵盤
public abstract void buildHD();
//獲得組裝好的電腦
public abstract Computer getComputer();
}
具體建造者ConcreteBuilder:
package com.zibo.design_mode.builder;
//裝機人員具體裝機的方法
public class ConcreteBuilder extends Builder {
Computer computer = new Computer();
@Override
public void buildCPU() {
computer.Add("裝CPU");
}
@Override
public void buildMainBoard() {
computer.Add("裝主板");
}
@Override
public void buildHD() {
computer.Add("裝硬盤");
}
@Override
public Computer getComputer() {
return computer;
}
}
產品類Computer:
package com.zibo.design_mode.builder;
import java.util.ArrayList;
import java.util.List;
public class Computer {
/**
* 電腦組件集合
*/
private List<String> parts = new ArrayList<>();
public void Add(String part) {
parts.add(part);
}
public void print() {
for (String part : parts) {
System.out.println("組件:" + part + "裝好了...");
}
System.out.println("電腦組裝完畢...");
}
}
導演類Director:
package com.zibo.design_mode.builder;
/**
* 裝機人員裝機
*/
public class Director {
public void Construct(Builder builder) {
builder.buildCPU();
builder.buildMainBoard();
builder.buildHD();
}
}
測試類BuilderPattern:
package com.zibo.design_mode.builder;
public class BuilderPattern {
public static void main(String[] args) {
//裝機人員裝機對象
Director director = new Director();
//構造器
Builder builder = new ConcreteBuilder();
//裝機
director.Construct(builder);
//獲取裝好的電腦
Computer computer = builder.getComputer();
//打印相關信息
computer.print();
}
}
運行結果:
組件:裝CPU裝好了...
組件:裝主板裝好了...
組件:裝硬盤裝好了...
電腦組裝完畢...
四、建造者模式的應用
封裝性:使用建造者模式可以是客戶端不必知道產品內部組成的細節;
建造者獨立,容易擴展;
便於控制細節風險:由於具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊穿上任何影響;
五、建造者模式的使用場景
相同的方法,不同的執行順序,產生不同的事件結果時,可以採用建造者模式;
多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時,則可以使用該模式;
產品類非常複雜,或者產品類中的調用順序不同產生了不同的效能,這個時候使用建造者模式非常合適;
在對象創建過程中會使用到系統中的一些其他對象,這些對象在產品對象的創建過程中不易得到時,也可以採用建造者模式封裝該對象的創建過程;
六、建造者模式的注意事項
建造者模式關注的是零件類型和裝配工藝(順序),這是它與工廠方法模式最大不同的地方,雖然同爲創建類模式,但是注重點不同。