建造者模式包括如下幾個角色 1.builder 抽象建造者 爲要建立的產品對象的各個部件指定抽象接口,聲明builderPartX()方法,getResult()方法返回複雜對象方法。 2.concrete Builder 具體建造者 實現builder接口,實現各個部件的構造和裝配方法,定義並明確它所建立的對象。 3.product 產品角色 被構建的複雜對象,被具體建造者建立。 4.Director 指揮者 與builder存在關聯關係,能夠在器construct()建造方法中調用對象的部件構造和裝配方法。與客戶端交互,示例化具體建造者對象(經過配置文件或反射機制)。經過構造函數或set()方法,將對象傳入指揮者。 例子
//產品角色 public class Meal{ private String food; private String drink; public void setFood(String food){ this.food=food; } public String getFood(){ return (this.food); } public void setDrink(String drink){ this.drink=drink; } public String getDrink(){ return (this.drink); } } //抽象建造者 public abstract class MealBuilder{ protected Meal meal = new Meal(); public abstract void buildFood(); public abstract void buildDrink(); public Meal getMeal(){ return meal; } } //具體建造者 A public class SubMealBuilderA extends MealBuilder{ public void buildFood(){ meal.setFood("a hootdog"); } public void buildDrink(){ meal.setDrink("a cup of coco"); } } //具體建造者 B public class SubMealBuildeB extends MealBuilder{ public void buildFood(){ meal.setFood("beaf"); } public void buildDrink(){ meal.setDrink("a cup of silk"); } } //指揮者類 public class KFCWaiter{ private MealBuilder mb; public void setMealBuilder(MealBuilder mb){ this.mb=mb; } public Meal construct(){ mb.buildFood(); mb.buildDrink(); return mb.getMeal(); } } //客戶端類 public class ClientBuilder{ public static void main(String[] args) { MealBuilder mb =new SubMealBuilderB(); KFCWaiter waiter =new KFCWaiter(); waiter.setMealBuilder(mb); Meal meal = waiter.construct(); System.out.println("----meal----"); System.out.println(meal.getFood()); System.out.println(meal.getDrink()); } } 結果: ----meal---- beaf a cup of silk