private void OpenClosed() { 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 (old):"); foreach (var item in productFilter.FilterByColor(products, Color.Green)) { Console.WriteLine($"{item.Name} is green"); } var betterFilter = new BetterFilter(); Console.WriteLine("Green products (new):"); foreach (var item in betterFilter.Filter(products, new ColorSpecification(Color.Green))) { Console.WriteLine($"{item.Name} is green"); } Console.WriteLine("Large blue items"); foreach (var item in betterFilter.Filter( products, new AndSpecification <Product>( new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large)))) { Console.WriteLine($"{item.Name} is large 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 }; var pf = new ProductFilter(); WriteLine("Green products (old):"); foreach (var p in pf.FilterByColor(products, Color.Green)) { WriteLine($" - {p.Name} is green."); } var bf = new BetterFilter(); WriteLine("Green products (new):"); foreach (var p in bf.Filter(products, new ColorSpecification(Color.Green))) { WriteLine($" - {p.Name} is green."); } WriteLine("Large blue items"); foreach (var p in bf.Filter( products, new AndSpecification <Product>( new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large)))) { WriteLine($" - {p.Name} is big and blue."); } }
public static void OPC() { 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 products = new Product[] { apple, tree, house }; var pf = new ProductFilter(); WriteLine("Green products (old):"); foreach (var p in pf.FilterByColor(products, Color.Green)) { WriteLine($" - {p._name} is {p._color}"); } var bf = new BetterFilter(); WriteLine("Green products (new): "); foreach (var item in bf.Filter(products, new ColorSpecification(Color.Green))) { WriteLine($" - {item._name} is {item._color}"); } WriteLine("Large blue items"); foreach (var item in bf.Filter(products, new AndSpecification <Product>( new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large) ))) { WriteLine($" - {item._name} is {item._color}"); } }
public static void TestOpenClosePrinciple() { var apple = new Product("Apple", Color.Red, Size.Medium); var tree = new Product("Tree", Color.Yellow, Size.Big); var house = new Product("House", Color.Blue, Size.Mediocore); Product[] products = { apple, tree, house }; Console.WriteLine("Red Products(old): "); foreach (var p in ProductFilter.FilterByColor(products, Color.Red)) { Console.WriteLine($"{p.Name} is {p.Color}"); } BetterFilter bf = new BetterFilter(); Console.WriteLine("Red Products(new): "); foreach (var p in bf.Filter(products, new ColorSpecification(Color.Red))) { Console.WriteLine($"{p.Name} is {p.Color}"); } Console.WriteLine("Red Products(new): "); foreach (var p in bf.Filter(products, new AndSpecification <Product>(new ColorSpecification(Color.Red), new SizeSpecification(Size.Mediocore)))) { Console.WriteLine($"{p.Name} is {p.Color} and {p.Size}"); } }
public void Start() { 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"); } }
public void Execute() { 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 item in pf.FilterByColor(products, Color.Green)) { Console.WriteLine($"- {item.Name} is green"); } /// Open Close Principle /// Create a functionality which can be easily be extend with /// the existing functionality without modifying the existing functionality var bf = new BetterFilter(); Console.WriteLine("Green products (new) :"); foreach (var item in bf.Filter(products, new ColorSpecification(Color.Green))) { Console.WriteLine($"- {item.Name} is green"); } Console.WriteLine("Large and Blue products (new) :"); foreach (var item in bf.Filter(products, new AndSpecification <Product>( new ColorSpecification(Color.Blue), new SizeSpecification(Size.Large) ))) { Console.WriteLine($"- {item.Name} is large and blue"); } }
private static void SolidPrinciples() { var journal = new Journal(); journal.AddEntry("I Started today Udemy."); journal.AddEntry("I started with Solid."); Console.WriteLine(journal); var persistence = new Persistence(); var fileName = @"C:\dev\designPatterns\journal.txt"; persistence.SaveToFile(journal, fileName, true); var apple = new Product("apple", Enums.Color.Green, Enums.Size.Small); var orange = new Product("orange", Enums.Color.Red, Enums.Size.Small); var tree = new Product("tree", Enums.Color.Blue, Enums.Size.Large); var house = new Product("house", Enums.Color.Blue, Enums.Size.Large); Product[] products = { apple, tree, house, orange }; var productFilter = new ProductFilter(); Console.WriteLine("Blue products (old): "); foreach (var p in productFilter.FilterByColor(products, Enums.Color.Blue)) { Console.WriteLine($" - {p.Name} is Blue"); } var betterFilter = new BetterFilter(); var colorSpec = new ColorSpecification(Enums.Color.Blue); Console.WriteLine("Blue products (new): "); foreach (var p in betterFilter.Filter(products, colorSpec)) { Console.WriteLine($" - {p.Name} is Blue"); } var sizeSpec = new SizeSpecification(Enums.Size.Large); var doubleSpec = new AndSpecification <Product>(colorSpec, sizeSpec); Console.WriteLine("Blue and Large products (new): "); foreach (var p in betterFilter.Filter(products, doubleSpec)) { Console.WriteLine($" - {p.Name} is Blue and large"); } var rectangle = new Rectangle(2, 3); Console.WriteLine($"{rectangle} has area {Area(rectangle)}"); Rectangle square = new Square(); square.Width = 3; Console.WriteLine($"{square} has area {Area(square)}"); var parent = new PersonDependencyInversion { Name = "Otman" }; var child1 = new PersonDependencyInversion { Name = "Loreto" }; var child2 = new PersonDependencyInversion { Name = "Emilio" }; rS.AddParentChild(parent, child1); }
static void Main(string[] args) { //demo1 var devCalculations = new List <BaseSalaryCalculator> { new SeniorDevSalaryCalculator(new DeveloperReport { Id = 1, Name = "Dev1", Level = "Senior developer", HourlyRate = 30.5, WorkingHours = 160 }), new JuniorDevSalaryCalculator(new DeveloperReport { Id = 2, Name = "Dev2", Level = "Junior developer", HourlyRate = 20, WorkingHours = 150 }), new SeniorDevSalaryCalculator(new DeveloperReport { Id = 3, Name = "Dev3", Level = "Senior developer", HourlyRate = 30.5, WorkingHours = 180 }) }; //SalaryCalculator class is now closed for modification and opened for an extension, which is exactly what OCP states. var calculator = new SalaryCalculator(devCalculations); Console.WriteLine($"Sum of all the developer salaries is {calculator.CalculateTotalSalaries()} dollars"); //demo2 //old var apple = new Product("Apple", Color.Green, Size.Small); var tree = new Product("Tree", Color.Green, Size.Large); var house = new Product("House", Color.Red, Size.Large); Product[] products = { apple, tree, house }; var productFilter = new ProductFilter(); Console.WriteLine("Green products(Old): "); foreach (var product in productFilter.FilterByColor(products, Color.Green)) { Console.WriteLine($" - {product.Name} is green"); } //new var betterFilter = new BetterFilter(); Console.WriteLine("Green products (new)"); foreach (var product in betterFilter.Filter(products, new ColorSpecification(Color.Green))) { Console.WriteLine($" - {product.Name} is green"); } //filter with two specification Console.WriteLine("Large red items"); foreach (var product in betterFilter.Filter( products, new AndSpecification <Product>( new ColorSpecification(Color.Red), new SizeSpecification(Size.Large)))) { Console.WriteLine($" - {product.Name} big and red"); } Console.WriteLine(); Console.WriteLine("DEMO3"); //demo3 new DEMO3.Demo3().Execute(); Console.ReadLine(); }
static void Main(string[] args) { // 01 - SRP var j = new Journal(); j.AddEntry("I cried today"); j.AddEntry("I ate a bug"); Console.WriteLine(j); var p = new Persistence(); var filename = @"Journal.txt"; p.SaveToFIle(j, filename, true); Process.Start(filename); // 02 - OCP 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 Product (Old):"); foreach (var item in pf.FilterByColor(products, Color.Green)) { Console.WriteLine($" - {item.Name} is green"); } var bf = new BetterFilter(); Console.WriteLine("Green Product (New):"); foreach (var item in bf.Filter(products, new ColorSpecification(Color.Green))) { Console.WriteLine($" - {item.Name} is green"); } Console.WriteLine("Large Product (New):"); foreach (var item in bf.Filter(products, new SizeSpecification(Size.Large))) { Console.WriteLine($" - {item.Name} is large"); } Console.WriteLine("Large Blue Product (New):"); foreach (var item in bf.Filter(products, new AndSpecification <Product>(new SizeSpecification(Size.Large), new ColorSpecification(Color.Blue)))) { Console.WriteLine($" - {item.Name} is big and blue"); } // 03 - LSP var rc = new Rectangle(2, 3); Console.WriteLine($"{rc} has area {Area(rc)}"); Rectangle sq = new Square(); sq.Width = 4; Console.WriteLine($"{sq} has area {Area(sq)}"); // 05 - DIP var parent = new Person() { Name = "John" }; var child1 = new Person() { Name = "Chris" }; var child2 = new Person() { Name = "Mary" }; var relationships = new DIP.Relationships(); relationships.AddParentAndChild(parent, child1); relationships.AddParentAndChild(parent, child2); _ = new DIP.Research(relationships); }