示例#1
0
        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(string[] args)
        {
            Section section = Section.Singleton;

            Console.WriteLine(); // Za prostor okoli okvirja
            switch (section)
            {
            case Section.Singleton:
            {
                // Klic konstruktorja se ne prevede
                //Singleton single = new Singleton();

                // Pokličimo funkcijo enkrat
                Singleton single1 = Singleton.Instance();
                Console.WriteLine($"Naključni ID prve instance je: {single1.RandomID}");

                // In ponovno
                Singleton single2 = Singleton.Instance();
                Console.WriteLine($"Naključni ID druge instance je: {single2.RandomID}");
            }
            break;

            case Section.SingletonLog:
            {
                EventLog log = EventLog.Instance();

                log.WriteEvent("Kreiramo nov dogodek.");
                Thread.Sleep(1000);
                log.WriteEvent("Kreiramo še enega.");
                Thread.Sleep(1000);
                log.WriteEvent("Počasi zaključujemo program.");

                Console.WriteLine("Konec zapisovanja v dnevnik");
            }
            break;

            case Section.FactoryBad:
            {
                // Tip kartice se izbere v GUI-ju
                CreditCardType type = CreditCardType.Gold;

                // 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 Section.FactoryGood:
            {
                // V uporabniškem vmesniku ohranimo samo logiko, ki se tiče uporabnika
                CreditCardType type = CreditCardType.Student;
                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();
        }