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

設計模式——建造者模式

組成 this 步驟 ring 相同 共同點 之間 優點 基礎

  • 什麽是建造者

    建造者模式實際上是常用的設計模式。顧名思義,builder的意思是建造者或者建築工人,談到建造自然會想到樓房。樓房是千差萬別的,樓房的外形、層數、內部房間的數量、房間的裝飾等等都不一樣,但是對於建造者來說,抽象出來的建築流程是確定的,往往建築一座樓房包括下面的步驟:(1)打樁,建立基礎(2)建立框架等。建造者模式的本質和建造樓房是一致的:即流程不變,但每個流程實現的具體細節則是經常變化的。建造者模式的好處就是保證了流程不會變化,流程即不會增加、也不會遺漏或者產生流程次序錯誤,這是非常重要的。我們熟知的樓歪歪事件,官方的解釋就是由於先建立樓房後,再建設停車場造成的,這是典型的建造次序錯亂。

技術分享圖片

     public class Meal {
    private String food;
    private String drink;

    public String getFood() {
        return food;
    }

    public void setFood(String food) {
        this.food = food;
    }

    public String getDrink() {
        return drink;
    }

    public void setDrink(String drink) {
        this.drink = drink;
    }
  }
  
    public abstract class MealBuilder {
    Meal meal = new Meal();
    
    public abstract void buildFood();
    
    public abstract void buildDrink();
    
    public Meal getMeal(){
        return meal;
    }
  }
 ```
 

public class MealA extends MealBuilder{

public void buildDrink() {
    meal.setDrink("一杯可樂");
}

public void buildFood() {
    meal.setFood("一盒薯條");
}

}

     public class MealB extends MealBuilder{

    public void buildDrink() {
        meal.setDrink("一杯檸檬果汁");
    }

    public void buildFood() {
        meal.setFood("三個雞翅");
    }

    }
    
     public class KFCWaiter {
    private MealBuilder mealBuilder;
    
    public void setMealBuilder(MealBuilder mealBuilder) {
        this.mealBuilder = mealBuilder;
    }

    public Meal construct(){
        //準備食物
        mealBuilder.buildFood();
        //準備飲料
        mealBuilder.buildDrink();
        
        //準備完畢,返回一個完整的套餐給客戶
        return mealBuilder.getMeal();
    }
    }

```

建造者模式例子

模式優缺點

  • 優點:

    1、將復雜產品的創建步驟分解在不同的方法中,使得創建過程更加清晰,使得我們能夠更加精確的控制復雜對象的產生過程。

    2、將產品的創建過程與產品本身分離開來,可以使用相同的創建過程來得到不同的產品。也就說細節依賴抽象。
  • 缺點:

    1、建造者模式所創建的產品一般具有較多的共同點,其組成部分相似,如果產品之間的差異性很大,則不適合使用建造者模式,因此其使用範圍受到一定的限制。
    2、如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。

設計模式——建造者模式