public void DoTheWork() { var productList = new List <IProduct> { new Product("red", "1"), new Product("blue", "1"), new Product("white", "1"), new Product("red", "2"), new Product("viola", "3"), new Product("black", "3"), new Product("red", "4"), new Product("brown", "4") }; var filter = new ProductFilter(); var filterByClor = filter.Apply(productList, new ColorSpecification("red")); var filterdBySize = filter.Apply(productList, new SizeSpecification("2")); }
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 }; var pf = new ProductFilter(); Console.WriteLine("Green products (old):"); foreach (var p in pf.FilterByColor(products, Color.Green)) { Console.WriteLine($" - {p.Name} is green"); } // ^^ BEFORE // vv AFTER 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"); } Console.WriteLine("Large products"); foreach (var p in bf.Filter(products, new SizeSpecification(Size.Large))) { Console.WriteLine($" - {p.Name} is large"); } 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"); } }
static void Main(string[] args) { Product[] products = new Product[] { new Product("Apple", Color.Green, Size.Small), new Product("Tree", Color.Green, Size.Huge), new Product("House", Color.Blue, Size.Huge) }; var pf = new ProductFilter(); foreach (var p in pf.FilterByColor(products, Color.Green)) { Console.WriteLine($" - {p.Name} is green"); } var bf = new BetterFilter(); foreach (var p in bf.Filter(products, new ColorSpecificaiton(Color.Green))) { Console.WriteLine($" - {p.Name} is green"); } var bf2 = new BetterFilter(); foreach (var p in bf2.Filter(products, new AndSpecification <Product>(new ColorSpecificaiton(Color.Green), new SizeSpecification(Size.Huge)))) { Console.WriteLine($" - {p.Name} is green and huge"); } Console.ReadKey(); // Go to http://aka.ms/dotnet-get-started-console to continue learning how to build a console app! }
/// <summary> /// "Software entities (classes, modules, functions, etc.) /// should be open for extension, but closed for modification" /// /// Extend ProductFilter without changing it by using inheritance. /// </summary> 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 }; var productFilter = new ProductFilter(); Console.WriteLine("Green products:"); foreach (var product in productFilter.Filter(products, new ColorSpecification(Color.Green))) { Console.WriteLine($" - {product.Name} is green"); } Console.WriteLine("Large blue items:"); foreach (var product in productFilter.Filter(products, new AndSpecification <Product>( new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large)))) { Console.WriteLine($" - {product.Name} is blue and large"); } }