static void Main(string[] args) { //Step 1: Define some dishes, and how many of each we can make FreshSalad caesarSalad = new FreshSalad("Crisp romaine lettuce", "Freshly-grated Parmesan cheese", "House-made Caesar dressing"); caesarSalad.Display(); Pasta fettuccineAlfredo = new Pasta("Fresh-made daily pasta", "Creamly garlic alfredo sauce"); fettuccineAlfredo.Display(); Console.WriteLine("\nMaking these dishes available."); //Step 2: Decorate the dishes; now if we attempt to order them once we're out of ingredients, we can notify the customer Available caesarAvailable = new Available(caesarSalad, 3); Available alfredoAvailable = new Available(fettuccineAlfredo, 4); //Step 3: Order a bunch of dishes caesarAvailable.OrderItem("John"); caesarAvailable.OrderItem("Sally"); caesarAvailable.OrderItem("Manush"); alfredoAvailable.OrderItem("Sally"); alfredoAvailable.OrderItem("Francis"); alfredoAvailable.OrderItem("Venkat"); alfredoAvailable.OrderItem("Diana"); alfredoAvailable.OrderItem("Dennis"); //There won't be enough for this order. caesarAvailable.Display(); alfredoAvailable.Display(); Console.ReadKey(); }
static void Main(string[] args) { // печатаем меню на сегодня :)) Pasta fettuccineAlfredo = new Pasta("Fresh-made daily pasta", "Creamly garlic alfredo sauce"); fettuccineAlfredo.Display(); FreshSalad caesarSalad = new FreshSalad("Crisp romaine lettuce", "Freshly-grated Parmesan cheese", "House-made Caesar dressing"); caesarSalad.Display(); FreshSalad greenSalad = new FreshSalad("greens", "cheese", "dressing"); // тепреь нам нужно декорировать эти блюда, сделать обёртки для этих классов, таким образом, // что бы можно было отслеживать сколько блюд можно еще заказать. // для этого создадим базовый класс для всех декораторов (оберток) class Decorator, Decorator.cs // а далее создадим на его основе уже конкретный декоратор с (необходимой) добавленной функциональностью. class Available, Available.cs // Теперь мы создаем блюда с кол-вом возможных заказов на сегодня. Available caesarAvailable = new Available(caesarSalad, 3); Available alfredoAvailable = new Available(fettuccineAlfredo, 4); Available greenSaladAvailable = new Available(greenSalad); // caesarAvailable и caesarSalad это все потомки класса RestaurantDish и имеют общий интерфейс. // Ну а теперь принимаем заказы - caesarAvailable.OrderItem("John"); caesarAvailable.OrderItem("Sally"); caesarAvailable.OrderItem("Manush"); alfredoAvailable.OrderItem("Sally"); alfredoAvailable.OrderItem("Francis"); alfredoAvailable.OrderItem("Venkat"); alfredoAvailable.OrderItem("Diana"); alfredoAvailable.OrderItem("Dennis"); // Not enough ingredients for Dennis's order! greenSaladAvailable.OrderItem("John"); // и посмотрим сколько раз заказали блюда. Статистика. caesarAvailable.Display(); alfredoAvailable.Display(); greenSaladAvailable.Display(); // заказ Dennis не выполнился, т.к. не достаточно ингредиентов. }
public void PizzaTest() { var whitePizzas = new Available(new WhitePizza(), 3); var meatPizzas = new Available(new MeatPizza(), 5); whitePizzas.OrderPizza("Luna"); whitePizzas.OrderPizza("Mimi"); whitePizzas.OrderPizza("Foma"); whitePizzas.OrderPizza("Barley"); meatPizzas.OrderPizza("Barley"); meatPizzas.OrderPizza("Tonya"); meatPizzas.OrderPizza("Anthony"); meatPizzas.OrderPizza("Lindsay"); meatPizzas.OrderPizza("Cameron"); meatPizzas.OrderPizza("Linden"); var whitePizzaOrders = whitePizzas.Display(); var meatPizzaOrders = meatPizzas.Display(); var expectedWhitePizzaOrders = new[] { "Luna ordered white pizza", "Mimi ordered white pizza", "Foma ordered white pizza", "Barley was unable to order white pizza" }; var expectedMeatPizzaOrders = new[] { "Barley ordered meat pizza", "Tonya ordered meat pizza", "Anthony ordered meat pizza", "Lindsay ordered meat pizza", "Cameron ordered meat pizza", "Linden was unable to order meat pizza" }; whitePizzaOrders.Should().ContainAll(expectedWhitePizzaOrders); meatPizzaOrders.Should().ContainAll(expectedMeatPizzaOrders); }