1. 程式人生 > 其它 >設計模式 建造者模式

設計模式 建造者模式

設計模式 建造者模式

基本概念

建造者模式也是建立形模式的一種(即避免了建立物件時使用new)

簡單例子

我們模擬一個建立房子的過程 假設需要4個步驟才能建立好房子 地基,鋼筋工程,鋪電線,粉刷

定義產品實體類

模擬假設執行了4個步驟就給定義的4個屬性賦值

@Data
public class Product {
    String stepA;
    String stepB;
    String stepC;
    String stepD;
}

定義Build抽象類

定義Build抽象類 包含了我們需要的4個步驟以及返回產品的抽象方法

public abstract class Builder {
    //假設建房要4個步驟
    abstract void stepA();//地基
    abstract void stepB();//鋼筋工程
    abstract void stepC();//鋪電線
    abstract void stepD();//粉刷
    //完工 得到產品
    abstract Product getProduct();
}

定義Worker具體實現類

定義了抽象類就需要去寫實現類 我們寫一個Worker去具體實現內部邏輯

//具體的建築者 工人
public class Worker extends Builder {
    private Product product;
    //注意這裡的構造方法
    public Worker() {
        product=new Product();
    }

    void stepA() {
        product.setStepA("地基");
        System.out.println("地基");
    }

    void stepB() {
        product.setStepB("鋼筋工程");
        System.out.println("鋼筋工程");
    }

    void stepC() {
        product.setStepC("鋪電線");
        System.out.println("鋪電線");
    }

    void stepD() {
        product.setStepD("粉刷");
        System.out.println("粉刷");
    }

    Product getProduct() {
        return product;
    }
}

定義指揮者 指揮工人如何去建立(核心思想)

注意引數是抽象類 Builder
這樣我們就可以根據具體傳進來的工人類去執行對應的方法

public class Director {
    //指揮工人按照一種順序工作
    public Product getProduct(Builder builder){
        builder.stepA();
        builder.stepB();
        builder.stepC();
        builder.stepD();
        return builder.getProduct();
    }
}

測試使用

public class Test {
    public static void main(String[] args) {
        //指揮
        Director director=new Director();
        //指揮 具體的工人
        Product product = director.getProduct(new Worker());
        System.out.println(product);
    }
}

這樣寫完後 假設我們想調換構造順序就很簡單了
只需要在指揮類換下執行順序即可

小總結