設計模式——建造者模式
阿新 • • 發佈:2018-03-31
組成 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、如果產品的內部變化復雜,可能會導致需要定義很多具體建造者類來實現這種變化,導致系統變得很龐大。
設計模式——建造者模式