什麼是建造者設計模式?

什麼是建造者設計模式?

Builder 設計模式封裝了對象的屬性並允許您構造它的表示。這種模式可以讓你構造複雜的對象,即使它們屬於同一個類,也具有不同的屬性。

典型的對像類包含屬性、構造函數和方法。構建器模式允許您從對像類中提取構造邏輯並將其放入稱為構建器的類中。然後,您可以使用這些構建器類來創建同一對象的不同變體。

在 Java 中實現構建器模式

構建器模式的一個很好的例子是披薩訂購系統,它允許客戶選擇不同的澆頭選項。

產品類別

一種方法是使構建器成為一個接口,但您需要先創建一個產品類。此示例應用程序中的產品是披薩。

public class Pizza {
    // properties
    private int orderNumber;
    private String pizzaDough;
    private String topping;

    // getters and setters
    public int getOrderNumber() {
        return orderNumber;
    }

    public void setOrderNumber(int orderNumber) {
        this.orderNumber = orderNumber;
    }

    public String getPizzaDough() {
        return pizzaDough;
    }

    public void setPizzaDough(String pizzaDough) {
        this.pizzaDough = pizzaDough;
    }

    public String getTopping() {
        return topping;
    }

    public void setTopping(String topping) {
        this.topping = topping;
    }
}

生成器類

Pizza Java 類具有三個屬性及其各自的 getter 和 setter,但沒有構造方法。構建器界面將允許您分別創建披薩對象的各個方面。然後它將允許您檢索整個比薩餅對象。

public interface Builder {
    public void createPizzaDough();
    public void createTopping();
    public Pizza getPizza();
}

示例比薩餅應用程序允許客戶訂購任何配料,例如奶酪、意大利辣香腸、洋蔥或不同的組合。因此,客戶將訂購的一種披薩是奶酪。

public class CheesePizzaBuilder implements Builder {
    private Pizza pizza;

    public CheesePizzaBuilder() {
        this.pizza = new Pizza();
    }

    @Override
    public void createPizzaDough() {
        this.pizza.setPizzaDough("Dough");
    }

    @Override
    public void createTopping() {
        this.pizza.setTopping("Cheese");
    }

    @Override
    public Pizza getPizza() {
        return this.pizza;
    }
}

CheesePizzaBuilder 類實現了 Builder 接口並使用它來創建一個新的奶酪披薩。這是 Pizza 對象的一種表示。它還以獨立於 Pizza 類的方式執行此操作。

CheesePizzaBuilder類對Pizza類了解不多,它只知道完成其功能所需要了解的內容。它知道 Pizza 類有一個 dough 和一個 topping 屬性,並將這些屬性設置為每個奶酪比薩都會有的兩個特定值。現在,每次應用程序調用 CheesePizzaBuilder 類時,它都會創建一個帶有奶酪面層的新 Pizza。

導演班

主管類是構建器模式的一個重要方面。具體構建器類的唯一目的是創建特定對象。它通過分別創建對象的不同部分來實現這一點。

但是,構建器具體類不知道該算法。沒有一個生成器類知道在添加面層之前製作麵團。這是導演類的功能。

public class Director {
    private Builder pizzaBuilder;

    public Director(Builder pizzaBuilder) {
        this.pizzaBuilder = pizzaBuilder;
    }

    public Pizza getPizza() {
        return this.pizzaBuilder.getPizza();
    }

    public void makePizza() {
        this.pizzaBuilder.createPizzaDough();
        this.pizzaBuilder.createTopping();
    }
}

Director 類使用構建器接口來製作比薩餅。它是算法的守護者。

使用建造者設計模式的優勢

使用構建器設計模式的主要優點是它的封裝屬性。這是軟件工程的一個重要方面,因為它有助於安全應用程序的開發。

這種設計模式的另一個優點是它的對象構造方法。它允許您創建多步驟流程,其中每個步驟都是獨立的,這使得調試更容易。

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *