1: /** "Product" */
2: class Pizza { 3: private String dough = "";
4: private String sauce = "";
5: private String topping = "";
6:
7: public void setDough(String dough) { 8: this.dough = dough;
9: }
10:
11: public void setSauce(String sauce) { 12: this.sauce = sauce;
13: }
14:
15: public void setTopping(String topping) { 16: this.topping = topping;
17: }
18: }
19:
20: /** "Abstract Builder" */
21: abstract class PizzaBuilder { 22: protected Pizza pizza;
23:
24: public Pizza getPizza() { 25: return pizza;
26: }
27:
28: public void createNewPizzaProduct() { 29: pizza = new Pizza();
30: }
31:
32: public abstract void buildDough();
33:
34: public abstract void buildSauce();
35:
36: public abstract void buildTopping();
37: }
38: /** "ConcreteBuilder" */
39: class HawaiianPizzaBuilder extends PizzaBuilder { 40: public void buildDough() { 41: pizza.setDough("cross"); 42: }
43:
44: public void buildSauce() { 45: pizza.setSauce("mild"); 46: }
47:
48: public void buildTopping() { 49: pizza.setTopping("ham+pineapple"); 50: }
51: }
52:
53: /** "ConcreteBuilder" */
54: class SpicyPizzaBuilder extends PizzaBuilder { 55: public void buildDough() { 56: pizza.setDough("pan baked"); 57: }
58:
59: public void buildSauce() { 60: pizza.setSauce("hot"); 61: }
62:
63: public void buildTopping() { 64: pizza.setTopping("pepperoni+salami"); 65: }
66: }
67: /** "Director" */
68: class Cook { 69: private PizzaBuilder pizzaBuilder;
70:
71: public void setPizzaBuilder(PizzaBuilder pb) { 72: pizzaBuilder = pb;
73: }
74:
75: public Pizza getPizza() { 76: return pizzaBuilder.getPizza();
77: }
78:
79: public void constructPizza() { 80: pizzaBuilder.createNewPizzaProduct();
81: pizzaBuilder.buildDough();
82: pizzaBuilder.buildSauce();
83: pizzaBuilder.buildTopping();
84: }
85: }
86:
87: /** A given type of pizza being constructed. */
88: public class BuilderExample { 89: public static void main(String[] args) { 90: Cook cook = new Cook();
91: PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder();
92: PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder();
93:
94: cook.setPizzaBuilder(hawaiianPizzaBuilder);
95: cook.constructPizza();
96:
97: Pizza pizza = cook.getPizza();
98: }
99: }