
//食物的抽象创建者
public abstract class FoodBuilder {
// 套餐
protected SetMealProduct sm = new SetMealProduct();
// 创建汉堡
public abstract void buildHamburg();
// 创建薯条
public abstract void buildChips();
// 创建可乐
public abstract void buildCola();
// 创建鸡肉卷
public abstract void buildChickenRolls();
public SetMealProduct getResult() {
return sm ;
}
} 具体食品创建者://具体食品创建者:KFC
//这样未来还可以支持麦当劳
public class KFCFoodBuilder extends FoodBuilder {
@Override
public void buildHamburg() {
sm.getFoodList().add( "汉堡");
}
@Override
public void buildChips() {
sm.getFoodList().add( "薯条");
}
@Override
public void buildCola() {
sm.getFoodList().add( "可乐");
}
@Override
public void buildChickenRolls() {
sm.getFoodList().add( "鸡肉卷" );
}
}//套餐
public class SetMealProduct {
// 套餐名称
private String name;
// 套餐中的食品集合
private List<String> foodList = new ArrayList<String>();
public List<String> getFoodList() {
return foodList ;
}
public void setFoodList(List<String> foodList) {
this.foodList = foodList;
}
public String getName() {
return name ;
}
public void setName(String name) {
this.name = name;
}
} 负责生成套餐,组装顺序的类://套餐一(薯条+可乐+汉堡)
class FirstDirector {
private FoodBuilder fb;
public FirstDirector(FoodBuilder fb) {
this.fb = fb;
}
public SetMealProduct construct() {
fb.buildChips(); // 薯条
fb.buildHamburg(); // 汉堡
fb.buildCola(); // 可乐
return fb .getResult();
}
}
// 套餐二(鸡肉卷+薯条+可乐)
class SecondDirector {
private FoodBuilder fb;
public SecondDirector(FoodBuilder fb) {
this.fb = fb;
}
public SetMealProduct construct() {
fb.buildChickenRolls(); // 鸡肉卷
fb.buildChips(); // 薯条
fb.buildCola(); // 可乐
return fb .getResult();
}
} 调用者: FirstDirector fDirector = new FirstDirector( new KFCFoodBuilder());
SecondDirector sDirector = new SecondDirector( new KFCFoodBuilder());
fDirector.construct();
sDirector.construct(); 这样的话,调用者不需要关心底层如何创建,如何组装的,直接获得就行了,其实这就是创建者模式的思想。原文地址:http://blog.csdn.net/xuepiaohan2006/article/details/38266005