2904. Design Pattern - BuilderBuilder Pattern
Creational Pattern: Builder Pattern.
1. Builder Pattern
The Builder pattern separates the construction of a complex object from its representation so that the same construction process can create different representations.
2. Example
2.1 Pizza
public class Pizza {
private String dough = "";
private String sauce = "";
private String topping = "";
public void setDough(String dough) {
this.dough = dough;
}
public void setSauce(String sauce) {
this.sauce = sauce;
}
public void setTopping(String topping) {
this.topping = topping;
}
@Override
public String toString() {
return "Dough: " + dough + ",Sauce: " + sauce + ",Topping: " + topping;
}
}
2.2 Pizza Builder
public abstract class PizzaBuilder {
protected Pizza pizza;
public Pizza getPizza() {
return pizza;
}
public void createPizza() {
pizza = new Pizza();
}
public abstract void buildDough();
public abstract void buildSauce();
public abstract void buildTopping();
}
public class CheesePizzaBuilder extends PizzaBuilder {
public void buildDough() {
pizza.setDough("cross");
}
public void buildSauce() {
pizza.setSauce("tomato");
}
public void buildTopping() {
pizza.setTopping("cheese");
}
}
public class PepperoniPizzaBuilder extends PizzaBuilder {
public void buildDough() {
pizza.setDough("pan baked");
}
public void buildSauce() {
pizza.setSauce("hot");
}
public void buildTopping() {
pizza.setTopping("pepperoni + salami");
}
}
2.3 Waiter
public class Waiter {
private PizzaBuilder pizzaBuilder;
public void setPizzaBuilder(PizzaBuilder pb) {
pizzaBuilder = pb;
}
public Pizza getPizza() {
return pizzaBuilder.getPizza();
}
public void constructPizza() {
pizzaBuilder.createPizza();
pizzaBuilder.buildDough();
pizzaBuilder.buildSauce();
pizzaBuilder.buildTopping();
}
}
2.4 Client
public class Client {
public void run() {
Waiter waiter = new Waiter();
PizzaBuilder cheesePizzaBuilder = new CheesePizzaBuilder();
PizzaBuilder pepperoniPizzaBuilder = new PepperoniPizzaBuilder();
waiter.setPizzaBuilder( pepperoniPizzaBuilder );
waiter.constructPizza();
Pizza pizza = waiter.getPizza();
System.out.println(pizza);
}
}
Output
Dough: pan baked,Sauce: hot,Topping: pepperoni + salami