//singleton Design patters //only one instance of Airline is allowed //lazy intialization public static Airline AirlineInstatnce() { if ( airlineInstatnce == null ) { airlineInstatnce = new Airline (); } return airlineInstatnce; }
/// <summary> /// This main method will call various classes that demonstrate different design patterns. These include /// Singleton, Facade, Composite, Factory and Strategy. /// Airline is Singleton /// Adding planes to a Brand uses Factory /// Getting a list of possible connecting flights uses Composite /// Facade is used to control Employees versus Customers and what they can do. /// Tickets use Strategy pattern to reflect the different cancellation policies. /// </summary> /// <param name="args"></param> static void Main(string[] args) { Employee Executive = new Employee(); Executive.CreateNewEmployeeAccounts(); Airline AirCanadaLine = new Airline(); Brand AirCanada = new Brand(); AirCanada.Name = "AirCanada"; AirCanadaLine.AddBrand(AirCanada); //AirCanada.Name = "Air Canada"; //Brand Air Canada has 19 Boeing 777-300ER, 6 Boeing 777-200LR, 8 Airbus A330-300, 22 Boeing 787-9, and 15 Boeing 787-8 aircrafts AirCanada.AddPlanes(1, 19); Console.ReadKey(); AirCanada.AddPlanes(2, 6); AirCanada.AddPlanes(3, 8); AirCanada.AddPlanes(4, 22); AirCanada.AddPlanes(5, 15); Console.ReadKey(); // Air Canada Express operates 15 Embraer E175, 16 Bombardier CRJ705, 25 Bombardier CRJ200, and 21 Bombardier Q400 Brand AirCanadaExpress = new Brand(); AirCanadaExpress.Name = "AirCanadaExpress"; AirCanadaLine.AddBrand(AirCanadaExpress); //AirCanada.Name = "Air Canada"; // Brand AirCanadaExpress = new Brand(); // AirCanadaExpress.Name = "Air Canada Express"; AirCanadaExpress.AddPlanes(6, 15); AirCanadaExpress.AddPlanes(7, 16); AirCanadaExpress.AddPlanes(8, 25); AirCanadaExpress.AddPlanes(9, 21); Console.ReadKey(); //Air Canada Rouge operates 9 Boeing 767-300ER and 20 Airbus A319-100 aircraft. Brand AirCanadaRouge = new Brand(); AirCanadaRouge.Name = "AirCanadaRouge"; AirCanadaLine.AddBrand(AirCanadaRouge); AirCanadaRouge.AddPlanes(10, 9); AirCanadaRouge.AddPlanes(11, 20); Console.ReadKey(); Account Employee = new Account(); Employee.EmployeeInd = true; Employee.ViewAccountInfo(Employee.EmployeeInd); Account Customer = new Account(); Customer.ViewAccountInfo(Customer.EmployeeInd); Ticket economyTicket = new Ticket(); economyTicket.PurchaseDate = DateTime.Now; economyTicket.SetCancelStrategy(new EconomyCancel()); economyTicket.Cancel(); Ticket premiumEconomyTicket = new Ticket(); premiumEconomyTicket.PurchaseDate = DateTime.Now; premiumEconomyTicket.SetCancelStrategy(new PremiumEconomyCancel()); premiumEconomyTicket.Cancel(); Ticket businessClassTicket = new Ticket(); businessClassTicket.PurchaseDate = DateTime.Now; businessClassTicket.SetCancelStrategy(new BusinessClassCancel()); businessClassTicket.Cancel(); Flight newStartFlight = new Flight(); newStartFlight.FlightNumber = "1"; Flight possibleConnection1 = new Flight(); possibleConnection1.FlightNumber = "2"; Flight possibleConnection2 = new Flight(); possibleConnection2.FlightNumber = "3"; CompositeElement root = new CompositeElement("TorontoToLondon"); root.Add(newStartFlight); root.Add(possibleConnection1); root.Add(possibleConnection2); root.Display(2); Console.ReadKey(); }
/// <summary> /// This main method will call various classes that demonstrate different design patterns. These include /// Singleton, Facade, Composite, Factory and Strategy. /// Airline is Singleton /// Adding planes to a Brand uses Factory /// Getting a list of possible connecting flights uses Composite /// Facade is used to control Employees versus Customers and what they can do. /// Tickets use Strategy pattern to reflect the different cancellation policies. /// /// </summary> /// <param name="args"></param> static void Main(string[] args) { // Employee Executive = new Employee(); // Executive.CreateNewEmployeeAccounts(); Airline AirCanadaLine = new Airline(); Brand AirCanada = new Brand(); AirCanada.Name = "AirCanada"; AirCanadaLine.AddBrand(AirCanada); //AirCanada.Name = "Air Canada"; //Brand Air Canada has 19 Boeing 777-300ER, 6 Boeing 777-200LR, 8 Airbus A330-300, 22 Boeing 787-9, and 15 Boeing 787-8 aircrafts AirCanada.AddPlanes(1, 19); Console.ReadKey(); AirCanada.AddPlanes(2, 6); AirCanada.AddPlanes(3, 8); AirCanada.AddPlanes(4, 22); AirCanada.AddPlanes(5, 15); Console.ReadKey(); // Air Canada Express operates 15 Embraer E175, 16 Bombardier CRJ705, 25 Bombardier CRJ200, and 21 Bombardier Q400 Brand AirCanadaExpress = new Brand(); AirCanadaExpress.Name = "AirCanadaExpress"; AirCanadaLine.AddBrand(AirCanadaExpress); AirCanadaExpress.AddPlanes(6, 15); AirCanadaExpress.AddPlanes(7, 16); AirCanadaExpress.AddPlanes(8, 25); AirCanadaExpress.AddPlanes(9, 21); Console.ReadKey(); //Air Canada Rouge operates 9 Boeing 767-300ER and 20 Airbus A319-100 aircraft. Brand AirCanadaRouge = new Brand(); AirCanadaRouge.Name = "AirCanadaRouge"; AirCanadaLine.AddBrand(AirCanadaRouge); AirCanadaRouge.AddPlanes(10, 9); AirCanadaRouge.AddPlanes(11, 20); Console.ReadKey(); Account Employee = new Account(); Employee.EmployeeInd = true; //An employee should not have a delinquent account of their own //And they can view their own account infor Employee.ViewAccountInfo(Employee.EmployeeInd, false); Account Customer = new Account(); Customer.Delinquent = true; //An employee should be able to see whether a customer account has delinquent //status for something like failing to pay for tickets on time. Customer.ViewAccountInfo(Customer.EmployeeInd, Customer.Delinquent); Customer.ViewAccountInfo(Employee.EmployeeInd, Customer.Delinquent); Ticket economyTicket = new Ticket(); economyTicket.PurchaseDate = DateTime.Now; economyTicket.SetCancelStrategy(new EconomyCancel()); economyTicket.Cancel(); Ticket premiumEconomyTicket = new Ticket(); premiumEconomyTicket.PurchaseDate = DateTime.Now; premiumEconomyTicket.SetCancelStrategy(new PremiumEconomyCancel()); premiumEconomyTicket.Cancel(); Ticket businessClassTicket = new Ticket(); businessClassTicket.PurchaseDate = DateTime.Now; businessClassTicket.SetCancelStrategy(new BusinessClassCancel()); businessClassTicket.Cancel(); Flight possibleConnection1 = new Flight(); possibleConnection1.name = "TorontoToHalifax"; Flight possibleConnection2 = new Flight(); possibleConnection2.name = "HalifaxToLondon"; Flight StartFlight = new Flight(); StartFlight.name = "TorontoToLondon"; CompositeElement root = new CompositeElement(StartFlight); possibleConnection1.name = "TorontoToHalifax"; PrimitiveElement newFlightPrimitive = new PrimitiveElement(possibleConnection1); root.Add(new PrimitiveElement(possibleConnection1)); root.Add(new PrimitiveElement(possibleConnection2)); root.Display(2); Console.ReadKey(); }