Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Created November 24, 2023 13:59
Show Gist options
  • Save sunmeat/bdf89d6cc78765faeff734c1f6b5db13 to your computer and use it in GitHub Desktop.
Save sunmeat/bdf89d6cc78765faeff734c1f6b5db13 to your computer and use it in GitHub Desktop.
builder C# 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();
}
/* Concrete Builder #1 */
class HawaiianPizzaBuilder : PizzaBuilder
{
public HawaiianPizzaBuilder()
{
Console.WriteLine("Hawaiian Pizza:");
}
public override void BuildDough()
{
pizza.SetDough("thick");
Console.WriteLine("thick dough");
}
public override void BuildSauce()
{
pizza.SetSauce("mild"); // не острый
Console.WriteLine("mild sause");
}
public override void BuildTopping()
{
pizza.SetTopping("ham + pineapple");
Console.WriteLine("ham+pineapple topping");
}
}
/* Concrete Builder #2 */
class SpicyPizzaBuilder : PizzaBuilder
{
public SpicyPizzaBuilder()
{
Console.WriteLine("Spicy Pizza:");
}
public override void BuildDough()
{
pizza.SetDough("thin");
Console.WriteLine("thin dough");
}
public override void BuildSauce()
{
pizza.SetSauce("hot"); // острый
Console.WriteLine("hot sause");
}
public override void BuildTopping()
{
pizza.SetTopping("pepperoni + salami");
Console.WriteLine("pepperoni+salami topping");
}
}
/* 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();
}
public void ConstructPizzaWithoutSauce() // для тех, кто хочет пиццу без соуса
{
pizzaBuilder.CreateNewPizzaProduct();
pizzaBuilder.BuildDough();
pizzaBuilder.BuildTopping();
}
}
class Program
{
static void Main()
{
var waiter = new Waiter();
waiter.SetPizzaBuilder(new HawaiianPizzaBuilder());
waiter.ConstructPizza();
// waiter.ConstructPizzaWithoutSauce();
var pizza = waiter.GetPizza();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment