将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示
public abstract class AbstractBuilder { Meal meal = new Meal(); public abstract void buildFood(); public abstract void buildDrink(); public Meal getMeal(){return meal;} }
public class SetMealA extends AbstractBuilder { public void buildFood() {meal.setFood("油条");} public void buildDrink() {meal.setDrink("豆浆");} } public class SetMealB extends AbstractBuilder { public void buildFood() {meal.setFood("面包");} public void buildDrink() {meal.setDrink("牛奶");} }
public class Meal { private String food; private String drink; public void setFood(String food) { this.food = food; } public void setDrink(String drink) { this.drink = drink; } @Override public String toString() { return "Meal{" + "food='" + food + '\'' + ", drink='" + drink + '\'' + '}'; } }
public class Director { private AbstractBuilder builder; public Director(AbstractBuilder builder) {this.builder = builder;} public Meal provideMeal() { builder.buildFood(); builder.buildDrink(); return builder.getMeal(); } }
public class Client { public static void main(String[] args) { System.out.println(new Director(new SetMealA()).provideMeal()); } }