Design Patterns - Builder
August 28th, 2007 | by programming |The Builder Pattern is a software design pattern. The purpose of using it is creating different represenatations from the same construction. It is accomplished by separating the construction of a complex object from its representation. Often, Builder Pattern is used to build Composite pattern, a structure pattern.
STRUCTURE

JAVA EXAMPLE
/** “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 Pizza getPizza() { return pizza; } public void createNewPizzaProduct() { pizza = new 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 void setPizzaBuilder(PizzaBuilder pb) { pizzaBuilder = pb; } public Pizza getPizza() { return pizzaBuilder.getPizza(); } public void constructPizza() { pizzaBuilder.createNewPizzaProduct(); pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping(); } } /** A customer ordering a pizza. */ class BuilderExample { public static void main(String[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder(); waiter.setPizzaBuilder( hawaiianPizzaBuilder ); waiter.constructPizza(); Pizza pizza = waiter.getPizza(); } }
C# EXAMPLE
//Implementation in C#. class Pizza { string dough; string sauce; string topping; public Pizza() {} public void SetDough( string d){ dough = d ;} public void SetSauce( string s){ sauce = s ;} public void SetTopping( string t){ topping = t ;} } abstract class PizzaBuilder { protected Pizza pizza; public PizzaBuilder(){} public Pizza GetPizza(){ return pizza; } public void CreateNewPizza() { pizza = new Pizza(); } public abstract void buildDough(); public abstract void buildSauce(); public abstract void buildTopping(); } class HawaiianPizzaBuilder : PizzaBuilder { public override void buildDough() { pizza.SetDough(“cross”); } public override void buildSauce() { pizza.SetSauce(“mild”); } public override void buildTopping() { pizza.SetTopping(“ham+pineapple”); } } class SpicyPizzaBuilder : PizzaBuilder { public override void buildDough() { pizza.SetDough(“pan backed”); } public override void buildSauce() { pizza.SetSauce(“hot”); } public override void buildTopping() { pizza.SetTopping(“pepparoni + salami”); } } /** “Director” */ class Waiter { private PizzaBuilder pizzaBuilder; public void setPizzaBuilder (PizzaBuilder pb) { pizzaBuilder = pb; } public Pizza GetPizza() { return pizzaBuilder.GetPizza(); } public void constructPizza() { pizzaBuilder.CreateNewPizza(); pizzaBuilder.buildDough(); pizzaBuilder.buildSauce(); pizzaBuilder.buildTopping(); } } /** A customer ordering a pizza. */ class BuilderExample { public static void Main(String[] args) { Waiter waiter = new Waiter(); PizzaBuilder hawaiianPizzaBuilder = new HawaiianPizzaBuilder(); PizzaBuilder spicyPizzaBuilder = new SpicyPizzaBuilder(); waiter.setPizzaBuilder ( hawaiianPizzaBuilder ); waiter.constructPizza(); Pizza pizza = waiter.GetPizza(); } }