Last active
January 15, 2026 22:20
-
-
Save sunmeat/4e578f61f0a0c38ad6171070f0e51a74 to your computer and use it in GitHub Desktop.
pattern builder C# example
This file contains hidden or 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
| 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