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

Design Patterns - Builder

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();
    }
}

Post a Comment