示例#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);
        }
示例#2
0
        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();
        }