Skip to content

Instantly share code, notes, and snippets.

@sunmeat
Last active January 15, 2026 22:20
Show Gist options
  • Select an option

  • Save sunmeat/4e578f61f0a0c38ad6171070f0e51a74 to your computer and use it in GitHub Desktop.

Select an option

Save sunmeat/4e578f61f0a0c38ad6171070f0e51a74 to your computer and use it in GitHub Desktop.
pattern builder C# example
using System.Text;
/* продукт */
class Pizza
{
public string? Dough { get; set; } // корж
public string? Sauce { get; set; } // соус
public string? Topping { get; set; } // начинка
}
/* абстрактний будівельник */ // можна сприймати як піцайолу
abstract class PizzaBuilder
{
protected Pizza? pizza;
public Pizza? GetPizza()
{
return pizza;
}
public void CreateNewPizza()
{
pizza = new Pizza();
}
public abstract void BuildDough();
public abstract void BuildSauce();
public abstract void BuildTopping();
}
/* конкретний будівельник #1 */ // налаштування для піци гавайської
class HawaiianPizzaBuilder : PizzaBuilder
{
public HawaiianPizzaBuilder()
{
Console.WriteLine("Піца гавайська:");
}
public override void BuildDough()
{
pizza.Dough = "товстий";
Console.WriteLine("товстий коржик");
}
public override void BuildSauce()
{
pizza.Sauce = "кислосолодкий";
Console.WriteLine("кислосолодкий не гострий соус");
}
public override void BuildTopping()
{
pizza.Topping = "куряче філе + ананаси + моцарела + сушена зелень";
Console.WriteLine("начинка: куряче філе + ананаси + моцарела + сушена зелень");
}
}
/* конкретний будівельник #2 */
class SpicyPizzaBuilder : PizzaBuilder
{
public SpicyPizzaBuilder()
{
Console.WriteLine("Піца Діаболо:");
}
public override void BuildDough()
{
pizza.Dough = "тонкий";
Console.WriteLine("тонкий коржик");
}
public override void BuildSauce()
{
pizza.Sauce = "шрірача";
Console.WriteLine("соус шрірача");
}
public override void BuildTopping()
{
pizza.Topping = "гострий пепероні + маринований халапеньйо + перець чилі + моцарела + болгарський перець + коктейльний помідор";
Console.WriteLine("начинка: гостра пепероні + маринований халапеньйо + перець чилі + моцарела + болгарський перець + коктейльний помідор");
}
}
/* розпорядник (директор) */ // офіціант
class Waiter
{
private PizzaBuilder? builder;
public void SetPizzaBuilder(PizzaBuilder pb)
{
builder = pb;
}
public Pizza? GetPizza()
{
return builder?.GetPizza();
}
public void MakePizza()
{
builder?.CreateNewPizza();
builder?.BuildDough();
builder?.BuildSauce();
builder?.BuildTopping();
}
public void MakePizzaWithoutSauce()
{
builder?.CreateNewPizza();
builder?.BuildDough();
builder?.BuildTopping();
}
}
class Program
{
static void Main()
{
Console.OutputEncoding = Encoding.UTF8;
// приходимо до ресторану
var waiter = new Waiter(); // підійшов офіціант
// розпоряднику передається інформація про тип конкретного Будівельника
waiter.SetPizzaBuilder(new HawaiianPizzaBuilder()); // офіціант приймає замовлення
// запускаємо процес створення Продукту за замовчуванням
waiter.MakePizza(); // офіціант пішов на кухню в пошуках Продукту
// опціонально, можна уточнити замовлення
// waiter.MakePizzaWithoutSauce(); // а це для тих, хто хоче піцу без соусу
Pizza? pizza = waiter.GetPizza(); // де моя піца?
// смачного :)
// приклад другої піци
Console.WriteLine("\nТепер робимо гостру піцу:");
waiter.SetPizzaBuilder(new SpicyPizzaBuilder());
waiter.MakePizza();
pizza = waiter.GetPizza();
// приклад без соусу
Console.WriteLine("\nПіца без соусу:");
waiter.SetPizzaBuilder(new HawaiianPizzaBuilder());
waiter.MakePizzaWithoutSauce();
pizza = waiter.GetPizza();
}
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment