public static void Run() { // Builder Pattern // - a director object which enforces a specific process uses builders // - these builders implement the builder abstraction that the director depends on // - these builders enable variations in details of each step in the process enforced by the director var coffeeMaker = new CoffeeMaker(); var americano = new AmericanoBuilder(); var latte = new LatteBuilder(); var flavoredlatte = new FlavoredLatteBuilder(); var ventiIcedAmericanoOrder = new DrinkOrder(iced: true, DrinkSize.Venti, americano); var tallIcedLatteOrder = new DrinkOrder(iced: true, DrinkSize.Tall, latte); var grandeHotFlavoredLatteOrder = new DrinkOrder(iced: false, DrinkSize.Grande, flavoredlatte); coffeeMaker.AcceptOrder(ventiIcedAmericanoOrder); coffeeMaker.BuildCoffee(); var ventiIcedAmericano = coffeeMaker.GetCoffee(); Console.WriteLine(ventiIcedAmericano.Description); coffeeMaker.AcceptOrder(tallIcedLatteOrder); coffeeMaker.BuildCoffee(); var tallIcedLatte = coffeeMaker.GetCoffee(); Console.WriteLine(tallIcedLatte.Description); coffeeMaker.AcceptOrder(grandeHotFlavoredLatteOrder); coffeeMaker.BuildCoffee(); var grandeHotFlavoredLatte = coffeeMaker.GetCoffee(); Console.WriteLine(grandeHotFlavoredLatte.Description); }
static void Main(string[] args) { var fileReader = new LocalFileReader(); var lineParser = new LineParser(); var coffeeMaker = new CoffeeFactory(); try { var lines = fileReader.GetAllLines(FILE_PATH); var ingredients = lines.Select(line => lineParser.ParseLine(line)).ToArray(); var recipe = new Recipe(ingredients); var coffee = coffeeMaker.GetCoffee(recipe); Director coffeeDirector = null; BaseCoffee madeCoffee = null; switch (coffee) { case Coffee.Espresso: var espressoBuilder = new EspressoBuilder(); coffeeDirector = new Director(espressoBuilder); coffeeDirector.MakeCoffee(); madeCoffee = espressoBuilder.GetResult(); break; case Coffee.Cappuccino: var cappucinoBuilder = new CappuccinoBuilder(); coffeeDirector = new Director(cappucinoBuilder); coffeeDirector.MakeCoffee(); madeCoffee = cappucinoBuilder.GetResult(); break; case Coffee.Americano: var americanoBuilder = new AmericanoBuilder(); coffeeDirector = new Director(americanoBuilder); coffeeDirector.MakeCoffee(); madeCoffee = americanoBuilder.GetResult(); break; case Coffee.FlatWhite: var flatWhiteBuilder = new FlatWhiteBuilder(); coffeeDirector = new Director(flatWhiteBuilder); coffeeDirector.MakeCoffee(); madeCoffee = flatWhiteBuilder.GetResult(); break; default: Console.WriteLine("Recipe not recognized"); Console.ReadLine(); return; } Console.WriteLine(madeCoffee.ToString()); } catch (Exception ex) { Console.WriteLine(ex.Message); } Console.ReadLine(); }