//Implementation in C#.classPizza{stringdough;stringsauce;stringtopping;publicstringDough{get{returndough;}set{dough=value;}}publicstringSauce{get{returnsauce;}set{sauce=value;}}publicstringTopping{get{returntopping;}set{topping=value;}}publicoverridestringToString(){returnstring.Format("Pizza with Dough as {0}, Sauce as {1} and Topping as {2}",Dough,Sauce,Topping);}}//Abstract BuilderabstractclassPizzaBuilder{protectedPizzapizza;publicPizzaPizza{get{returnpizza;}}publicvoidCreateNewPizza(){pizza=newPizza();}publicabstractvoidBuildDough();publicabstractvoidBuildSauce();publicabstractvoidBuildTopping();}//Concrete BuilderclassHawaiianPizzaBuilder:PizzaBuilder{publicoverridevoidBuildDough(){pizza.Dough="cross";}publicoverridevoidBuildSauce(){pizza.Sauce="mild";}publicoverridevoidBuildTopping(){pizza.Topping="ham+pineapple";}}//Concrete BuilderclassSpicyPizzaBuilder:PizzaBuilder{publicoverridevoidBuildDough(){pizza.Dough="pan baked";}publicoverridevoidBuildSauce(){pizza.Sauce="hot";}publicoverridevoidBuildTopping(){pizza.Topping="pepparoni+salami";}}/** "Director" */classWaiter{privatePizzaBuilderpizzaBuilder;publicPizzaBuilderPizzaBuilder{get{returnpizzaBuilder;}set{pizzaBuilder=value;}}publicPizzaPizza{get{returnpizzaBuilder.Pizza;}}publicvoidConstructPizza(){pizzaBuilder.CreateNewPizza();pizzaBuilder.BuildDough();pizzaBuilder.BuildSauce();pizzaBuilder.BuildTopping();}}publicclassTestPizza{privatestaticvoidBuildAndDisplayPizza(Waiterwaiter){waiter.ConstructPizza();System.Console.WriteLine(waiter.Pizza);}publicstaticvoidMain(){Waiterwaiter=newWaiter();waiter.PizzaBuilder=newHawaiianPizzaBuilder();BuildAndDisplayPizza(waiter);waiter.PizzaBuilder=newSpicyPizzaBuilder();BuildAndDisplayPizza(waiter);}}
// Implementation in C++.#include<iostream>#include<memory>#include<string>// ProductclassPizza{private:std::stringdough;std::stringsauce;std::stringtopping;public:Pizza(){}~Pizza(){}voidSetDough(conststd::string&d){dough=d;};voidSetSauce(conststd::string&s){sauce=s;};voidSetTopping(conststd::string&t){topping=t;}voidShowPizza(){std::cout<<" Yummy !!!"<<std::endl<<"Pizza with Dough as "<<dough<<", Sauce as "<<sauce<<" and Topping as "<<topping<<" !!! "<<std::endl;}};
// Abstract BuilderclassPizzaBuilder{protected:std::auto_ptr<Pizza>pizza;public:PizzaBuilder(){}virtual~PizzaBuilder(){}std::auto_ptr<Pizza>GetPizza(){returnpizza;}voidcreateNewPizzaProduct(){pizza.reset(newPizza);}virtualvoidbuildDough()=0;virtualvoidbuildSauce()=0;virtualvoidbuildTopping()=0;};// ConcreteBuilderclassHawaiianPizzaBuilder:publicPizzaBuilder{public:HawaiianPizzaBuilder():PizzaBuilder(){}~HawaiianPizzaBuilder(){}voidbuildDough(){pizza->SetDough("cross");}voidbuildSauce(){pizza->SetSauce("mild");}voidbuildTopping(){pizza->SetTopping("ham and pineapple");}};
// ConcreteBuilderclassSpicyPizzaBuilder:publicPizzaBuilder{public:SpicyPizzaBuilder():PizzaBuilder(){}~SpicyPizzaBuilder(){}voidbuildDough(){pizza->SetDough("pan baked");}voidbuildSauce(){pizza->SetSauce("hot");}voidbuildTopping(){pizza->SetTopping("pepperoni and salami");}};// DirectorclassWaiter{private:PizzaBuilder*pizzaBuilder;public:Waiter():pizzaBuilder(NULL){}~Waiter(){}voidSetPizzaBuilder(PizzaBuilder*b){pizzaBuilder=b;}std::auto_ptr<Pizza>GetPizza(){returnpizzaBuilder->GetPizza();}voidConstructPizza(){pizzaBuilder->createNewPizzaProduct();pizzaBuilder->buildDough();pizzaBuilder->buildSauce();pizzaBuilder->buildTopping();}};
// A customer ordering two pizza.intmain(){Waiterwaiter;HawaiianPizzaBuilderhawaiianPizzaBuilder;waiter.SetPizzaBuilder(&hawaiianPizzaBuilder);waiter.ConstructPizza();std::auto_ptr<Pizza>pizza=waiter.GetPizza();pizza->ShowPizza();SpicyPizzaBuilderspicyPizzaBuilder;waiter.SetPizzaBuilder(&spicyPizzaBuilder);waiter.ConstructPizza();pizza=waiter.GetPizza();pizza->ShowPizza();returnEXIT_SUCCESS;}