Exemple #1
0
        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);
        }