Date post: | 04-Jan-2016 |
Category: |
Documents |
Upload: | ursula-patrick |
View: | 216 times |
Download: | 0 times |
By James Sheets
An object creational pattern.
Separates the construction of a complex object from its representation so that the same construction process can create different representations.
1. An object requires different representations in different contexts
2. How a complex object is constructed is important
3. You need to encapsulate the logic behind constructing a complex object
Convert an internal object into various file formats (pdf, doc)
Building a maze. Create a map, start point, end point, and then the maze walls.
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Director
Constructor()
Builder
BuildPart() : void
ConcreteBuilder
BuildPart() : void
GetResult() : Product
ProductFor all objects in builder { builder->BuildPart();}
For all objects in builder { builder->BuildPart();}
builder
Waiter
Waiter(PizzaBuilder)GetPizza() : PizzaConstructPizza() : void
PizzaBuilder
GetPizza() : PizzaBuildDough() : voidBuildSauce() : voidBuildToppings() : void
HawaiianPizzaBuilder
BuildDough() : voidBuildSauce() : voidBuildToppings() : void
SpicyPizzaBuilder
BuildDough() : voidBuildSauce() : voidBuildToppings() : void
Pizza
SetDough(String) : voidSetSauce(String) : voidSetToppings(String) : void
/** "Product" */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; }
}
/** "Abstract Builder" */ abstract class PizzaBuilder {
protected Pizza pizza;
public void PizzaBuilder() {
pizza = new Pizza(); } public Pizza getPizza() { return pizza; }
public abstract void buildDough(); public abstract void buildSauce(); public abstract void buildTopping();
}
/** "ConcreteBuilder" */ class HawaiianPizzaBuilder extends PizzaBuilder {
public void buildDough() { pizza.setDough("cross"); } public void buildSauce() { pizza.setSauce("mild"); } public void buildTopping() { pizza.setTopping("ham+pineapple"); }
}
/** "ConcreteBuilder" */ class SpicyPizzaBuilder extends PizzaBuilder {
public void buildDough() { pizza.setDough("pan baked"); } public void buildSauce() { pizza.setSauce("hot"); } public void buildTopping() { pizza.setTopping("pepperoni+salami"); }
}
/** "Director" */ class Waiter {
private PizzaBuilder pizzaBuilder;
public Waiter(PizzaBuilder pb) { pizzaBuilder = pb; }public Pizza getPizza() { return pizzaBuilder.getPizza(); } public void constructPizza() {
pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping();
} }
/** A customer ordering a pizza. */ class BuilderExample {
public static void main(String[] args) {
// ConcreteBuilder cast as a BuilderPizzaBuilder hawaiian= new HawaiianPizzaBuilder(); // DirectorWaiter waiter = new Waiter(hawaiian);
waiter.constructPizza(); // ProductPizza pizza = waiter.getPizza();
} }
Concrete Builders create families of objects, like an Abstract Factory
Abstract Factory returns the family of related objects
Builders construct a complex object one step at a time