构建器模式通过使用简单对象,逐步地构建复杂对象, 它是一种创建模式。
举例说明:
假设我们去快餐店吃饭,那里有汉堡和冷饮。
汉堡有可能是素食汉堡(Veg Burger)或鸡肉堡(Chicken Burger),它们都是用包装纸包装的。
冷饮有可能是可乐(coke)或者百事可乐(pepsi),它们都是用瓶子装的。
我们将创建一个表示食品(如汉堡和冷饮)信息的 Item 接口(名称、打包方式、价格),以及实现 Item 接口的具体类。
同时再创建一个表示打包方式(如汉堡用包装纸包装,可乐用瓶子装)的Packing接口以及Packing的具体类。
然后,创建一个Meal类,它包含食物的信息(Item)。
最后,创建一个MealBuilder类,用来生产各种Meal。

// Itempublic interface Item { public String name(); public Packing packing(); public float price(); }// Packingpublic interface Packing { public String pack();}// Wrapperpublic class Wrapper implements Packing { @Override public String pack() { return "Wrapper"; }}// Bottlepublic class Bottle implements Packing { @Override public String pack() { return "Bottle"; }}// Burgerpublic abstract class Burger implements Item { @Override public Packing packing() { return new Wrapper(); } @Override public abstract float price();}// ColdDrinkpublic abstract class ColdDrink implements Item { @Override public Packing packing() { return new Bottle(); } @Override public abstract float price();}// VegBurgerpublic class VegBurger extends Burger { @Override public float price() { return 25.0f; } @Override public String name() { return "Veg Burger"; }}// ChickenBurgerpublic class ChickenBurger extends Burger { @Override public float price() { return 50.5f; } @Override public String name() { return "Chicken Burger"; }}// Cokepublic class Coke extends ColdDrink { @Override public float price() { return 30.0f; } @Override public String name() { return "Coke"; }}// Pepsipublic class Pepsi extends ColdDrink { @Override public float price() { return 35.0f; } @Override public String name() { return "Pepsi"; }}import java.util.ArrayList;import java.util.List;public class Meal { private List<Item> items = new ArrayList<Item>(); public void addItem(Item item){ items.add(item); } public float getCost(){ float cost = 0.0f; 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 BuilderPatternDemo { 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 MealItem : Veg Burger, Packing : Wrapper, Price : 25.0Item : Coke, Packing : Bottle, Price : 30.0Total Cost: 55.0Non-Veg MealItem : Chicken Burger, Packing : Wrapper, Price : 50.5Item : Pepsi, Packing : Bottle, Price : 35.0Total Cost: 85.5