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"); } }
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"); } }
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"); } }
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"); } }