圖靈系列叢書(互動設計、程式設計、大資料、人工智慧等)
阿新 • • 發佈:2019-01-14
建造者模式
簡介
建造者模式是屬於建立型模式。建造者模式使用多個簡單的物件一步一步構建成一個複雜的物件。這種型別的設計模式屬於建立型模式,它提供了一種建立物件的最佳方式。
簡單的來說就是將一個複雜的東西抽離出來,對外提供一個簡單的呼叫,可以在同樣的構建過程建立不同的表示。和工廠模式很相似,不過相比而言更加註重元件的裝配。
這裡用一個示例來進行說明。
我們一天吃的食物有這些,煎餅、盒飯、拉麵、豆漿、牛奶和果汁。分為三餐、早餐、午餐和晚餐,餐點主要包含吃的(俗稱飯)和喝的(豆漿,果汁之類的),那麼我們可以把煎餅和豆漿作為早餐,盒飯和果汁作為午餐,這樣我們可以清楚的知道要吃早餐和午餐包含什麼食物。
首先我們定義一個食物類,有兩個屬性,吃的和喝的。
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; } }