Пример #1
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");

            /*
             *  Ya no se crean acá las instancias de la clase Step, sino que se crean dentro de Recipe por patrón Creator.
             *  Por más que la clase Program tiene todos los datos que serán provistos al constructor de Step, la creación
             *  se pasa a Recipe porque ante estos casos el patrón dice que hay que preferir la clase que contenga instancias de Step.
             */
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);


            /*
             *  La creación de las Printers acá es correcta según el patrón Creator, ya que la clase Program es la única
             *  que usa de forma cercana estas clases
             */
            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Пример #2
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            /* Como podemos ver la siguiente operaciones llevadas a cabo son polimorficas , ya que
             * no se pregunta por el tipo,o por ejemplo la destination, para ejecutar un diferente tipo de codigo,
             * asi cumpliendo con el patron Polymorphism.
             *
             * Tambien se cumple el principio Lsp ya que al cambiar de clase entre subtipos sigue pudiendose hacer la operacion
             * de la manera esperada. Nuestro programa va a poder imprimir las recetas a partir de la instancia IPrinter
             * pero funcionaria igual si usaramos los tipos defiinidos por ConsolePrinter o Filer Printer
             */

            IPrinter printer = new ConsolePrinter();

            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Пример #3
0
        public static void Main(string[] args)
        {
            EquipmentCatalog equipmentCatalog = new EquipmentCatalog();
            ProductCatalog   productCatalog   = new ProductCatalog();

            productCatalog.AddProductToCatalog("Café", 100);
            productCatalog.AddProductToCatalog("Leche", 200);
            productCatalog.AddProductToCatalog("Café con leche", 300);

            equipmentCatalog.AddEquipmentToCatalog("Cafetera", 1000);
            equipmentCatalog.AddEquipmentToCatalog("Hervidor", 2000);

            Recipe recipe = new Recipe();

            recipe.FinalProduct = productCatalog.GetProduct("Café con leche");
            recipe.AddStep(recipe.CreateStep(productCatalog.GetProduct("Café"), 100, equipmentCatalog.GetEquipment("Cafetera"), 120));
            recipe.AddStep(recipe.CreateStep(productCatalog.GetProduct("Leche"), 200, equipmentCatalog.GetEquipment("Hervidor"), 60));

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Пример #4
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));
            ConsolePrinter.PrintRecipe(recipe);
        }
Пример #5
0
        public static void Main(string[] args)
        {
            Recipe recipe = new Recipe();

            recipe.AddStep("Café", 2, 100, "Cafetera", 10, 1000);
            recipe.AddStep("Leche", 6, 20, "Microondas", 50, 200);

            Product finalProduct = new Product("Café con leche", 20);

            recipe.FinalProduct = finalProduct;

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            filePrinter.PrintRecipe(recipe);
            consolePrinter.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);
            recipe.AddStep("Dejar enfriar", 60);

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            consolePrinter.PrintRecipe(recipe);
            filePrinter.PrintRecipe(recipe);
        }
Пример #7
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            //Creo 2 objetos del tipo IPrinter uno de ellos es instancia de ConsolePrinter y el otro de FilePrinter

            IPrinter printer1 = new ConsolePrinter();
            IPrinter printer2 = new FilePrinter();

            printer1.PrintRecipe(recipe, printer1);
            printer2.PrintRecipe(recipe, printer2);
        }
Пример #8
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // SE UTILIZA EL PATRON DE POLIMORFISMO

            IPrinter consolePrinter = new ConsolePrinter();
            IPrinter filePrinter    = new FilePrinter();

            consolePrinter.PrintRecipe(recipe);
            filePrinter.PrintRecipe(recipe);
        }
Пример #9
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            //Utilizamos Creator para quitar la creación de la instancia Step, en Program,
            //porque es más adecuado que la cree Recipe (mediante el nuevo método AddStep)
            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            /// <summary>
            /// Cambios en el program para poder utilizar las nuevas implementaciones
            /// </summary>
            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
Пример #11
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // Utilizo el principio de sustitucion de Liskov y
            // el patron Polimorfismo
            // el comportamiento de ambos tipos es el esperado
            // ConsolePrinter y FilePrinter por eso cumple el principio de sustitucion
            // Ademas es una solucion polimorfica
            IPrinter printer = new ConsolePrinter();

            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            // Se crea una clase que será la encargada de instanciar Product y Equipment y guardar en lista.
            CatalogMaker catalog = new CatalogMaker();

            PopulateCatalogs(catalog);
            Recipe recipe = new Recipe();

            recipe.FinalProduct = catalog.GetProduct("Café con leche");

            //Ya no se instancian steps en Program.
            recipe.AddStep(catalog.GetProduct("Café"), 100, catalog.GetEquipment("Cafetera"), 120);
            recipe.AddStep(catalog.GetProduct("Leche"), 200, catalog.GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(new Step(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120));
            recipe.AddStep(new Step(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60));

            // Se instancian dos objetos de tipo IPrinter con las dos distintas
            // clases creadas. Luego se las llama de la misma forma obteniendo
            // distintos resultados. Todos ellos, esperados sin interferir.
            // Se concluye que se definió exitosamente la operación polimórfica.

            IPrinter printer1 = new ConsolePrinter();
            IPrinter printer2 = new FilePrinter();

            printer1.PrintRecipe(recipe);
            printer2.PrintRecipe(recipe);
        }
Пример #14
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);
            recipe.AddStep("Dejar enfriar", 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);

            Console.WriteLine($"Cooked: {recipe.Cooked}");
            recipe.Cook();
            Thread.Sleep(500); // 0.5 segundos
            Console.WriteLine($"Cooked: {recipe.Cooked}");
        }
Пример #15
0
        public static void Main(string[] args)
        {
            PopulateCatalogs();

            Recipe recipe = new Recipe();

            recipe.FinalProduct = GetProduct("Café con leche");

            /// <summary>
            /// Se saca la responsabilidad a Program de crear los objetos de tipo Step
            /// y se le asigna a la clase Recipe de acuerdo al patrón Creator,
            /// se detalla en la clase Recipe
            /// </summary>
            /// <returns></returns>
            recipe.AddStep(GetProduct("Café"), 100, GetEquipment("Cafetera"), 120);
            recipe.AddStep(GetProduct("Leche"), 200, GetEquipment("Hervidor"), 60);

            IPrinter printer;

            printer = new ConsolePrinter();
            printer.PrintRecipe(recipe);
            printer = new FilePrinter();
            printer.PrintRecipe(recipe);
        }