static void Main(string[] args) { #region Creational Patterns #region Singleton Pattern //Singleton singleton = Singleton.Instance; Console.WriteLine("------Singleton Pattern------"); LoadBalancer b1 = LoadBalancer.GetLoadBalancer(); LoadBalancer b2 = LoadBalancer.GetLoadBalancer(); LoadBalancer b3 = LoadBalancer.GetLoadBalancer(); LoadBalancer b4 = LoadBalancer.GetLoadBalancer(); // Same instance? if (b1 == b2 && b2 == b3 && b3 == b4) { Console.WriteLine("Same instance\n"); } // Load balance 15 server requests LoadBalancer balancer = LoadBalancer.GetLoadBalancer(); for (int i = 0; i < 15; i++) { string server = balancer.Server; Console.WriteLine("Dispatch Request to: " + server); } // Wait for user Console.ReadKey(); #endregion #region Factory Method Pattern //Console.WriteLine("------Factory Method Pattern------"); //ICreditCard creditCard = new PlatinumFactory().CreateProduct(); //if (creditCard != null) //{ // Console.WriteLine("Card Type : " + creditCard.GetCardType()); // Console.WriteLine("Credit Limit : " + creditCard.GetCreditLimit()); // Console.WriteLine("Annual Charge :" + creditCard.GetAnnualCharge()); //} //else //{ // Console.Write("Invalid Card Type"); //} //Console.WriteLine("--------------"); //creditCard = new MoneyBackFactory().CreateProduct(); //if (creditCard != null) //{ // Console.WriteLine("Card Type : " + creditCard.GetCardType()); // Console.WriteLine("Credit Limit : " + creditCard.GetCreditLimit()); // Console.WriteLine("Annual Charge :" + creditCard.GetAnnualCharge()); //} //else //{ // Console.Write("Invalid Card Type"); //} //Console.ReadLine(); #endregion #region Abstract Factory Pattern //Console.WriteLine("------Abstract Factory Pattern------"); //IAnimal animal = null; //AnimalFactory animalFactory = null; //string speakSound = string.Empty; //// Create the Sea Factory object by passing the factory type as Sea //animalFactory = AnimalFactory.CreateAnimalFactory("Sea"); //Console.WriteLine("Animal Factory type : " + animalFactory.GetType().Name); //Console.WriteLine(); //// Get Octopus Animal object by passing the animal type as Octopus //animal = animalFactory.GetAnimal("Octopus"); //Console.WriteLine("Animal Type : " + animal.GetType().Name); //speakSound = animal.Speak(); //Console.WriteLine(animal.GetType().Name + " Speak : " + speakSound); //Console.WriteLine(); //Console.WriteLine("--------------------------"); //// Create Land Factory object by passing the factory type as Land //animalFactory = AnimalFactory.CreateAnimalFactory("Land"); //Console.WriteLine("Animal Factory type : " + animalFactory.GetType().Name); //Console.WriteLine(); //// Get Lion Animal object by passing the animal type as Lion //animal = animalFactory.GetAnimal("Lion"); //Console.WriteLine("Animal Type : " + animal.GetType().Name); //speakSound = animal.Speak(); //Console.WriteLine(animal.GetType().Name + " Speak : " + speakSound); //Console.WriteLine(); //// Get Cat Animal object by passing the animal type as Cat //animal = animalFactory.GetAnimal("Cat"); //Console.WriteLine("Animal Type : " + animal.GetType().Name); //speakSound = animal.Speak(); //Console.WriteLine(animal.GetType().Name + " Speak : " + speakSound); //Console.Read(); #endregion #endregion #region Structural Patterns #region Adapter Pattern //Console.WriteLine("------Adapter Pattern------"); //Console.WriteLine("------Example (1) ------"); //Person p = new Person(); //p.SwitchOn(new HP_Laptop()); //On HP Laptop //p.SwitchOn(new Compaq_Laptop()); //On Compaq laptop //Console.WriteLine("------Example (2) ------"); //ITarget adapter = new VendorAdapter(); //foreach (string product in adapter.GetProducts()) //{ // Console.WriteLine(product); //} //Console.ReadLine(); #endregion #endregion #region Behavioral Patterns #region Strategy Pattern //Console.WriteLine("------Strategy Pattern------"); //List<Employee> employees = new List<Employee>(); //employees.Add(new Employee() //{ // Name = "Mohammad Helal", // Type = EmployeeType.PartTime //}); //employees.Add(new Employee() //{ // Name = "Mohammad Adnan", // Type = EmployeeType.FullTime //}); //var manager = new SalaryManager(); //foreach (var item in employees) //{ // Console.WriteLine($"Name: {item.Name} - Salary: {manager.CalculateSalary(item)}"); //} //Console.ReadLine(); #endregion #region State Pattern //Console.WriteLine("------State Pattern------"); //CDPlayer cdPlayer = new CDPlayer(); ////Change CD Player state from 'Closed' to 'Opened' //cdPlayer.Press(); ////Change CD Player state from 'Opened' to 'Playing' //cdPlayer.Press(); ////Change CD Player state from 'Playing' to 'Closed' //cdPlayer.Press(); //Console.ReadLine(); #endregion #endregion }