建造者模式是一步一步建立一個複雜的對象,它允許使用者隻通過指定複雜對象的類型和内容就可以建構它們,使用者不需要知道内部的具體建構細節
以肯德基套餐為例
1、産品角色
建立一個産品類Meal
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;
}
}
2、抽象建造者
建立一個Product對象的各個部件指定的抽象類
public abstract class MealBuilder {
Meal meal = new Meal();
public abstract void buildFood();
public abstract void buildDrink();
public Meal getMeal(){
return meal;
}
}
3、具體建造者
繼承抽象類,建構和裝配各個部件
A套餐:
public class MealA extends MealBuilder{
public void buildDrink() {
meal.setDrink("可樂");
}
public void buildFood() {
meal.setFood("薯條");
}
}
B套餐:
public class MealB extends MealBuilder{
public void buildDrink() {
meal.setDrink("檸檬果汁");
}
public void buildFood() {
meal.setFood("雞翅");
}
}
4、指揮官
建構一個使用Builder接口的對象
public class KFCWaiter {
private MealBuilder mealBuilder;
public KFCWaiter(MealBuilder mealBuilder) {
this.mealBuilder = mealBuilder;
}
public Meal construct(){
//準備食物
mealBuilder.buildFood();
//準備飲料
mealBuilder.buildDrink();
//準備完畢,傳回一個完整的套餐給客戶
return mealBuilder.getMeal();
}
}
5、測試類
public class Test {
public static void main(String[] args) {
//套餐A
MealA a = new MealA();
//準備套餐A的服務員
KFCWaiter waiter = new KFCWaiter(a);
//獲得套餐
Meal mealA = waiter.construct();
System.out.print("套餐A的組成部分:");
System.out.println("食物:"+mealA.getFood()+"; "+"飲品:"+mealA.getDrink());
}
}
