1. 程式人生 > >圖靈系列叢書(互動設計、程式設計、大資料、人工智慧等)

圖靈系列叢書(互動設計、程式設計、大資料、人工智慧等)

建造者模式

簡介

建造者模式是屬於建立型模式。建造者模式使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
簡單的來說就是將一個複雜的東西抽離出來,對外提供一個簡單的呼叫,可以在同樣的構建過程建立不同的表示。和工廠模式很相似,不過相比而言更加註重元件的裝配。

這裡用一個示例來進行說明。
我們一天吃的食物有這些,煎餅、盒飯、拉麵、豆漿、牛奶和果汁。分為三餐、早餐、午餐和晚餐,餐點主要包含吃的(俗稱飯)和喝的(豆漿,果汁之類的),那麼我們可以把煎餅和豆漿作為早餐,盒飯和果汁作為午餐,這樣我們可以清楚的知道要吃早餐和午餐包含什麼食物。

首先我們定義一個食物類,有兩個屬性,吃的和喝的。

class Meal{
    private String food;
    private String drinks;
    
    public String getFood() {
        return food;
    }
    public void setFood(String food) {
        this.food = food;
    }
    
    public String getDrinks() {
        return drinks;
    }
    public void setDrinks(String drinks) {
        this.drinks = drinks;
    }
}

定義了食物時候,我們在定義一個食物的標準介面,一份食物包含什麼,其實也就是吃的和喝的。

interface IBuilderFood{
    void buildFood();
    void buildDrinks();
    Meal createMeal();
}

食物介面定義一個吃的和一個喝的元件,然後通過createMeal()方法返回我們需要的食物。
那麼現在我們便可以定義一份早餐和午餐。
程式碼示例:

class Breakfast implements IBuilderFood{
    Meal meal;

    public Breakfast(){
        meal=new Meal();
    }
    
    @Override
    public void buildFood() {
        meal.setFood("煎餅");
    }

    @Override
    public void buildDrinks() {
        meal.setDrinks("豆漿");   
    }
    
    @Override
    public Meal createMeal() {
        return meal;
    }
}

class Lunch implements IBuilderFood{
    Meal meal;

    public Lunch(){
        meal=new Meal();
    }
    
    @Override
    public void buildFood() {
        meal.setFood("盒飯");
    }

    @Override
    public void buildDrinks() {
        meal.setDrinks("果汁");   
    }
    
    @Override
    public Meal createMeal() {
        return meal;
    }
}