public static ICreditCard GetCreditCard(CreditCardType type) { // Pripravimo si novo spremenljivko ICreditCard card = null; // Ustvarimo instanco glede na izbrani tip switch (type) { case CreditCardType.Student: card = new Student(); break; case CreditCardType.Silver: card = new Silver(); break; case CreditCardType.Gold: card = new Gold(); break; case CreditCardType.Platinum: card = new Platinum(); break; } return(card); }
static void Main() { switch (InterfaceFunctions.ChooseSection <DesignPatternsSections>()) { case DesignPatternsSections.Singleton: { // Osnoven primer kreiranja singletona SingletonTests.CreateSingleton(); } break; case DesignPatternsSections.SingletonLog: { // Primer uporabe singletona za kreiranje objekta log (dnevnik dogodkov) SingletonTests.CreateLog(); } break; case DesignPatternsSections.FactoryBad: { // Slab primer izbire tipa kartice: // Tip kartice se izbere v GUI-ju CreditCardType type = InterfaceFunctions.ChooseSection <CreditCardType>(); // Pripravimo si novo spremenljivko ICreditCard card = null; // Ustvarimo instanco glede na izbrani tip switch (type) { case CreditCardType.Silver: card = new Silver(); break; case CreditCardType.Gold: card = new Gold(); break; case CreditCardType.Platinum: card = new Platinum(); break; } // Izpišemo podatke Console.WriteLine("Podatki o kartici:"); Console.WriteLine($" Tip: {card.CreditCardType}"); Console.WriteLine($" Limit: {card.Limit}"); Console.WriteLine($" Letni strošek: {card.AnnualCharge}"); /* * Težava pri zgornjem načinu je, da so uporabniški vmesnik in razredi kreditnih kartic * močno povezani. Če dodamo nov tip kartice, moramo to popraviti tudi v uporabniškem vmesniku, * saj je treba dopolniti switch. */ } break; case DesignPatternsSections.FactoryGood: { // V uporabniškem vmesniku ohranimo samo logiko, ki se tiče uporabnika CreditCardType type = InterfaceFunctions.ChooseSection <CreditCardType>(); ICreditCard card = CreditCardFactory.GetCreditCard(type); // Izpišemo podatke Console.WriteLine("Podatki o kartici:"); Console.WriteLine($" Tip: {card.CreditCardType}"); Console.WriteLine($" Limit: {card.Limit}"); Console.WriteLine($" Letni strošek: {card.AnnualCharge}"); } break; } Console.ReadLine(); }