建造者模式-複雜例項的建立與組裝
阿新 • • 發佈:2018-12-20
建造者模式定義
將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。
建造者模式結構圖
建造者模式角色介紹
Builder:抽象建造者角色,負責定義建立Product產品物件的各個部件介面,同時定義獲取完成Product產品物件的介面。
ConcreteBuilder:具體建造者角色,它實現了Builder介面,實現各個部件的具體構造和裝配方法,實現了獲取最終複雜產品物件結果的方法。
Product:產品角色,它是被構建的複雜物件,包含多個組成部件,具體建造者建立該產品的各個組成部分。
Director:指揮者角色,它負責安排複雜物件的建造次序,指揮者面向抽象建造者程式設計。指揮者在construct()建造方法中呼叫建造者物件的部件構造與裝配方法,完成複雜物件的建造,並通過建造者獲取建造的完整複雜產品物件。
建造者模式結構程式碼
抽象建造者:
public abstract class Builder {
public abstract void buildPartA();
public abstract void buildPartB();
public abstract void buildPartC();
public abstract Product getResult();
}
具體建造者:
public class ConcreteBuilder extends Builder { Product product = new Product(); public void buildPartA() { product.setPartA("PartA"); } public void buildPartB() { product.setPartA("PartB"); } public void buildPartC() { product.setPartA("PartC"); } public Product getResult() { return product; } }
產品:
public class Product { private String partA; private String partB; private String partC; public String getPartA() { return partA; } public void setPartA(String partA) { this.partA = partA; } public String getPartB() { return partB; } public void setPartB(String partB) { this.partB = partB; } public String getPartC() { return partC; } public void setPartC(String partC) { this.partC = partC; } }
指揮者:
public class Director {
private Builder builder;
public Director(Builder builder) {
this.builder = builder;
}
public Product construct(){
builder.buildPartA();
builder.buildPartB();
builder.buildPartC();
return builder.getResult();
}
}
客戶端:
public class Client {
public static void main(String[] args) {
Director director = new Director(new ConcreteBuilder());
Product product = director.construct();
System.out.println("PartA:"+product.getPartA()+",PartB:"+product.getPartB()+",PartC:"+product.getPartC());
}
}
建造者模式執行機制
客戶端確定具體建造者的型別,並例項化具體建造者物件(也可以通過配置檔案和反射機制),然後通過指揮者類的建構函式或者Setter方法將該物件傳入指揮者類中。最後客戶端只需要與指揮者進行互動,就可以完成複雜產品物件的建立和獲取。
建造者模式解決的核心問題
建造者模式解決的是複雜物件建立和組裝過程。複雜物件的組成部分和建立過程是固定的,所以將固定的組成部分交由抽象建造者的抽象方法定義,將固定的建立過程交由指揮者管理。但這個複雜物件具有不同的表現形式,則通過不同的具體建造者來實現,表現形式不同,建造者就不同。