Created
November 24, 2023 13:59
-
-
Save sunmeat/bdf89d6cc78765faeff734c1f6b5db13 to your computer and use it in GitHub Desktop.
builder C# example
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
/* 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