https://www.cnblogs.com/snailclimb/p/builderpattern.html
/**
*
* Product(产品角色)
*
* */
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;
}
}
/**
*
* Builder(抽象建造者)
*
* */
public abstract class MealBuilder{
Meal meal = new Meal();
public abstract void buildFood();
public abstract void buildDrink();
public Meal getMeal(){
return meal;
}
}
/**
*
* ConcreteBuilder(具体建造者): A套餐
*
* */
public class MealA extends MealBuilder{
@Override
public void buildFood() {
meal.setFood("薯条");
}
@Override
public void buildDrink() {
meal.setDrink("可乐");
}
}
/**
*
* ConcreteBuilder(具体建造者): B套餐
*
* */
public class MealB extends MealBuilder{
@Override
public void buildFood() {
meal.setFood("鸡翅");
}
@Override
public void buildDrink() {
meal.setDrink("柠檬果汁");
}
}
/**
*
* 指挥者Director
*
* */
public class KFCWaiter {
private MealBuilder mealBuilder;
//1、构造方法的方式注入builder对象
public KFCWaiter(MealBuilder mealBuilder){
this.mealBuilder = mealBuilder;
}
public Meal construct(){
//准备食物
mealBuilder.buildFood();
//准备饮料
mealBuilder.buildDrink();
return mealBuilder.getMeal();
}
}
public class Test {
public static void main(String[] argvs) {
//套餐A
MealA a = new MealA();
//通知准备套餐A的服务员
KFCWaiter waiter = new KFCWaiter(a);
//获取套餐
Meal mealA = waiter.construct();
System.out.println("套餐A的组成部分:"+"食物:"+mealA.getFood()+"; "+"饮品:"+mealA.getDrink());
//套餐B
MealB b = new MealB();
//通知准备套餐B的服务员
waiter = new KFCWaiter(b);
//获取套餐
Meal mealB = waiter.construct();
System.out.println("套餐B的组成部分:"+"食物:"+mealB.getFood()+"; "+"饮品:"+mealB.getDrink());
}
}