1. 程式人生 > >建造者模式-複雜例項的建立與組裝

建造者模式-複雜例項的建立與組裝

建造者模式定義

將一個複雜物件的構建與它的表示分離,使得同樣的構建過程可以建立不同的表示。

建造者模式結構圖

在這裡插入圖片描述

建造者模式角色介紹

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方法將該物件傳入指揮者類中。最後客戶端只需要與指揮者進行互動,就可以完成複雜產品物件的建立和獲取。

建造者模式解決的核心問題

建造者模式解決的是複雜物件建立和組裝過程。複雜物件的組成部分和建立過程是固定的,所以將固定的組成部分交由抽象建造者的抽象方法定義,將固定的建立過程交由指揮者管理。但這個複雜物件具有不同的表現形式,則通過不同的具體建造者來實現,表現形式不同,建造者就不同。