static void Main(string[] args) { Group groupA = new HighPriorityGroup("A", "HPG"); Group groupB = new ModeratePriorityGroup("B", "MPG"); Group groupC = new LowPriorityGroup("C", "LPG"); //ChainOfResponsibilities groupA.SetSuccessor(groupB); groupB.SetSuccessor(groupC); Requestor requestor = new Requestor(); requestor.Name = "req1"; requestor.Priority = 111; requestor.TypeOfFlight = "internal"; Console.WriteLine("Assign customer to a group"); groupA.HandleRequest(requestor); Console.WriteLine($"Customer was assigned to group {requestor.Group.Name}"); //Console.Write(groupC.requestors.First().Name); //Console.Write(requestor.Group.Name); Console.ReadKey(); //State Console.WriteLine("First call"); requestor.Call(); Console.ReadKey(); Console.WriteLine("Second call"); requestor.Call(); Console.ReadKey(); Console.WriteLine("Third call"); requestor.Call(); Console.ReadKey(); Console.WriteLine("Customer support call"); requestor.Call(); Console.ReadKey(); //Command Employee empl1 = groupC.employees.Find(x => x.Position == "FlightBuilder"); Flight flight1 = new Flight(); flight1.Start = "S1"; flight1.Destination = "D1"; flight1.Price = 10; Flight flight2 = new Flight(); flight2.Start = "S2"; flight2.Destination = "D2"; flight2.Price = 20; Flight flight3 = new Flight(); flight3.Start = "S3"; flight3.Destination = "D3"; flight3.Price = 30; Flight flight4 = new Flight(); flight4.Start = "S4"; flight4.Destination = "D4"; flight4.Price = 40; empl1.AddFlight(requestor, flight1); empl1.AddFlight(requestor, flight2); empl1.AddFlight(requestor, flight3); empl1.Undo(requestor); empl1.AddFlight(requestor, flight4); //requestor.Route.ShowFlights(); Console.ReadKey(); //Strategy requestor.Route.SetCalculationStrategy(new CalculatePrimeMethod()); Console.WriteLine($"Total route price is {requestor.Route.CalculatePrice()}"); Console.ReadKey(); //Observer ShiftManager shiftManager = new ShiftManager(); foreach (Employee empl in groupA.employees) { shiftManager.Attach(empl); } Shift nightShift = new Shift("night", "17:00", "23:00"); shiftManager.SetNewShift(nightShift); Console.ReadKey(); }