建造者模式一步一步地通过简单的对象创建复杂的对象。
本例介绍快餐店中的快餐,快餐有汉堡和饮料,汉堡分为蔬菜汉堡和肌肉汉堡,饮料分为百事和可口可乐。汉堡需要盒子来装,可乐需要瓶子。通过创建一个Meal类来表示点的快餐。
public interface Item {
public String name();
public Packing packing();
public float price();
}
public interface Packing {
public String pack();
}
public class Wrapper implements Packing {
@Override
public String pack() {
return "Wrapper";
}
}
public class Bottle implements Packing { @Override public String pack() { return "Bottle"; } }
public abstract class Burger implements Item { @Override public Packing packing() { return new Wrapper(); } @Override public abstract float price(); }
public abstract class ColdDrink implements Item { @Override public Packing packing() { return new Bottle(); } @Override public abstract float price(); }
public class ChickenBurger extends Burger { @Override public String name() { return "Chicken Burger"; } @Override public float price() { return 50.5f; } }
public class VegBurger extends Burger { @Override public String name() { return "Veg Burger"; } @Override public float price() { return 25.0f; } }
public class Coke extends ColdDrink { @Override public String name() { return "Coke"; } @Override public float price() { return 30.0f; } }
public class Pepsi extends ColdDrink { @Override public String name() { return "Pepsi"; } @Override public float price() { return 35.0f; } }
public class Meal { private List<Item> items = new ArrayList<Item>(); public void addItem(Item item) { items.add(item); } public float getCost() { float cost = 0; for (Item item : items) { cost += item.price(); } return cost; } public void showItems() { for (Item item : items) { System.out.print("Item: " + item.name()); System.out.print(",Packing: " +item.packing().pack()); System.out.println(",Price: " + item.price()); } } }
public class MealBuilder { public Meal prepareVegMeal() { Meal meal = new Meal(); meal.addItem(new VegBurger()); meal.addItem(new Coke()); return meal; } public Meal prepareNonVegMeal() { Meal meal = new Meal(); meal.addItem(new ChickenBurger()); meal.addItem(new Pepsi()); return meal; } }
public class Demo { public static void main(String[] args) { MealBuilder mealBuilder = new MealBuilder(); Meal vegMeal = mealBuilder.prepareVegMeal(); System.out.println("Veg Meal"); vegMeal.showItems(); System.out.println("Total Cost: " + vegMeal.getCost()); Meal nonVegmeal = mealBuilder.prepareNonVegMeal(); System.out.println("\n\nNon-Veg Meal"); nonVegmeal.showItems(); System.out.println("Total Cost: " + nonVegmeal.getCost()); } }
输出:
Veg Meal Item: Veg Burger,Packing: Wrapper,Price: 25.0 Item: Coke,Packing: Bottle,Price: 30.0 Total Cost: 55.0 Non-Veg Meal Item: Chicken Burger,Packing: Wrapper,Price: 50.5 Item: Pepsi,Packing: Bottle,Price: 35.0 Total Cost: 85.5