建造者模式(builder),將一個復雜對象的構建與它的表示分離,使得同樣的構建過程可以創建不同的表示。

舉個建造汽車的例子,現在要建造一輛汽車,需要發動機,變速箱,底盤(汽車三大件)
產品類:
public class Car { PRivate String engine; // 發動機引擎 private String transmission; // 變速箱 private String chassis; // 底盤 public String getEngine() { return engine; } public void setEngine(String engine) { this.engine = engine; } public String getTransmission() { return transmission; } public void setTransmission(String transmission) { this.transmission = transmission; } public String getChassis() { return chassis; } public void setChassis(String chassis) { this.chassis = chassis; } @Override public String toString() { return "Car{" + "engine='" + engine + '/'' + ", transmission='" + transmission + '/'' + ", chassis='" + chassis + '/'' + '}'; }}抽象建造者
public abstract class Builder { public abstract void buildEngine(String engine); public abstract void buildTransmission(String transmission); public abstract void buildChassis(String chassis); public abstract Car create();}建造者
public class DFCarBuilder extends Builder { private Car dfCar = new Car(); @Override public void buildEngine(String engine) { dfCar.setEngine(engine); } @Override public void buildTransmission(String transmission) { dfCar.setTransmission(transmission); } @Override public void buildChassis(String chassis) { dfCar.setChassis(chassis); } @Override public Car create() { return dfCar; }}用Dirextor指揮者類來統一組裝過程
public class Dirextor { Builder builder = null; public Dirextor(Builder builder) { this.builder = builder; } public Car createCar(String engine, String transmission, String chassis){ this.builder.buildChassis(chassis); this.builder.buildEngine(engine); this.builder.buildTransmission(transmission); return builder.create(); } public static void main(String[] args) { Builder builder = new DFCarBuilder(); Dirextor dirextor = new Dirextor(builder); Car myCar = dirextor.createCar("地球夢科技發動機", "愛信9AT自動變速箱", "標志的底盤"); System.out.println(myCar.toString()); }}使用場景:
當創建復雜對象的算法應該獨立于該對象的組成部分以及它們的裝配方式時。相同的方法,不同的執行順序,產生不同的事件結果時。多個部件或零件,都可以裝配到一個對象中,但是產生的運行結果又不相同時。產品類非常復雜,或者產品類中的調用順序不同產生了不同的效能。創建一些復雜的對象時,這些對象的內部組成構件間的建造順序是穩定的,但是對象的內部組成構件面臨著復雜的變化。優點:
使用建造者模式可以使客戶端不必知道產品內部組成的細節。具體的建造者類之間是相互獨立的,容易擴展。由于具體的建造者是獨立的,因此可以對建造過程逐步細化,而不對其他的模塊產生任何影響。新聞熱點
疑難解答