private static void Main(string[] args)
        {
            #region OpenClosePrinicple
            var apple = new OpenClosedPrinciple.Product("Apple", OpenClosedPrinciple.Color.Green, OpenClosedPrinciple.Size.Small);
            var tree  = new OpenClosedPrinciple.Product("Tree", OpenClosedPrinciple.Color.Green, OpenClosedPrinciple.Size.Large);
            var house = new OpenClosedPrinciple.Product("House", OpenClosedPrinciple.Color.Blue, OpenClosedPrinciple.Size.Large);

            var products = new List <OpenClosedPrinciple.Product>()
            {
                apple, tree, house
            };

            var fp = new OpenClosedPrinciple.FilterProducts();
            Console.WriteLine("Green products:");
            var gp = fp.Filter(products, new OpenClosedPrinciple.Specification(OpenClosedPrinciple.Size.Large));
            foreach (var p in gp)
            {
                Console.WriteLine($" - {p.Name} is Large");
            }

            var fps = new OpenClosedPrinciple.FilterProducts();
            Console.WriteLine("Green products an large:");

            var lp = new List <OpenClosedPrinciple.ISpecification <OpenClosedPrinciple.Product> > {
                new OpenClosedPrinciple.Specification(OpenClosedPrinciple.Size.Large), new OpenClosedPrinciple.Specification(OpenClosedPrinciple.Color.Green)
            };
            var gps = fp.Filters(products, lp);
            foreach (var p in gps)
            {
                Console.WriteLine($" - {p.Name} is green and large");
            }
            #endregion
        }
Exemple #2
0
        // Open-Closed Principle Example
        public static void OCP()
        {
            var apple = new OpenClosedPrinciple.Product("Apple", OpenClosedPrinciple.Color.Green, OpenClosedPrinciple.Size.Small);
            var tree  = new OpenClosedPrinciple.Product("Tree", OpenClosedPrinciple.Color.Green, OpenClosedPrinciple.Size.Large);
            var house = new OpenClosedPrinciple.Product("House", OpenClosedPrinciple.Color.Blue, OpenClosedPrinciple.Size.Large);

            OpenClosedPrinciple.Product[] products = { apple, tree, house };

            var pf = new OpenClosedPrinciple.ProductFilter();

            WriteLine("Green products (old): ");
            foreach (var p in pf.FilterByColor(products, OpenClosedPrinciple.Color.Green))
            {
                WriteLine($" - {p.Name} is green");
            }

            // ^^ BEFORE

            // vv AFTER

            var bf = new OpenClosedPrinciple.BetterFilter();

            WriteLine("Green products (new): ");
            foreach (var p in bf.Filter(products, new OpenClosedPrinciple.ColorSpecification(OpenClosedPrinciple.Color.Green)))
            {
                WriteLine($" - {p.Name} is green");
            }

            WriteLine("Large blue items: ");
            foreach (var p in bf.Filter(
                         products,
                         new OpenClosedPrinciple.AndSpecification <OpenClosedPrinciple.Product>(
                             new OpenClosedPrinciple.ColorSpecification(OpenClosedPrinciple.Color.Blue),
                             new OpenClosedPrinciple.SizeSpecification(OpenClosedPrinciple.Size.Large)
                             )))
            {
                WriteLine($" - {p.Name} is big and blue");
            }
        }