static void Main(string[] args)
        {
            var apple = new Product("Apple", Color.Green, Size.S);
            var tree  = new Product("Tree", Color.Green, Size.L);
            var house = new Product("House", Color.Blue, Size.XL);

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

            var pf = new ProductFilter();

            Console.WriteLine("Green product (old):");
            foreach (var p in pf.FilterByColor(products, Color.Green))
            {
                Console.WriteLine($"- {p.Name} is green");
            }
        }
示例#2
0
        static void Main(string[] args)
        {
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Blue, Size.Large);


            var flower  = new Product("Flower", Color.Pink, Size.Medium);
            var picture = new Product("Picture", Color.Yellow, Size.Small);
            var baby    = new Product("Baby", Color.Pink, Size.Medium);

            Product[] products = { apple, tree, house, flower, picture, baby };

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

            var pf = new ProductFilter();

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

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

            // MODYFICATION
            // Add new pink color
            // Add new products
            // Filter by pink and medium

            Console.WriteLine("Pink and medium:");
            foreach (var p in pf.Filter(products, new AddSpecification <Product>(new ColorSpecification(Color.Pink), new SizeSpecification(Size.Medium))))
            {
                Console.WriteLine($" - {p.Name} is pink and medium");
            }
        }
示例#3
0
        public static void Main(string[] args)
        {
            //Bad approach
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Blue, Size.Large);

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

            var pf = new ProductFilter();

            Console.WriteLine("Green products (old)");

            foreach (var product in pf.FilterByColor(products, Color.Green))
            {
                Console.WriteLine($"-{product.Name} is green");
            }

            //Better approach
            var bf = new BetterFilter();

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

            Console.WriteLine("Large blue items");
            foreach (var product in bf.Filter(
                         products,
                         new AndSpecification <Product>(
                             new ColorSpecification(Color.Blue),
                             new SizeSpecification(Size.Large)
                             )
                         ))
            {
                Console.WriteLine($" -{product.Name} is big and blue");
            }
        }
示例#4
0
        static void Main(string[] args)
        {
            var apple = new Product("Apple", Color.Green, Size.Small);
            var tree  = new Product("Tree", Color.Green, Size.Large);
            var house = new Product("House", Color.Blue, Size.Large);

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

            // Using bad example.
            var pf = new ProductFilter();

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

            // Using good example.
            var bf = new BetterFilter();

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

            // Another good example using color and size in filter.
            Console.WriteLine("Large blue items:");
            foreach (var p in bf.Filter(
                         products,
                         new AndSpecification <Product>(
                             new ColorSpecification(Color.Blue),
                             new SizeSpecification(Size.Large)
                             )))
            {
                Console.WriteLine($" - {p.Name} is big and blue");
            }
        }