示例#1
0
        // GET: api/DesignPattern

        /*public IEnumerable<string> Get()
         * {
         *  return new string[] { "value1", "value2" };
         * }*/

        // GET: api/DesignPattern/5
        public string Get(string card)
        {
            CardFactory factory = null;

            switch (card.ToLower())
            {
            case "moneyback":
                factory = new MoneyBackFactory(50000, 0);
                break;

            case "titanium":
                factory = new TitaniumFactory(100000, 500);
                break;

            case "platinum":
                factory = new PlatinumFactory(500000, 1000);
                break;

            default:
                break;
            }
            var creditCard = factory.GetCreditCard();

            var cardDetails = $" Card Type : {creditCard.CardType}  Credit Limit : {creditCard.CreditLimit}  Annual Charges : {creditCard.AnnualCharge}";

            return(cardDetails);
        }
示例#2
0
        private static void Factory_Method_Pattern()
        {
            // TODO when you are about to instantiate lets encapsulate that instantiation so that we can make uniform in all places ->
            // TODO -> you can use the factory when you want to instantiate and the factory is responsible to instantiate appropriately

            CardFactory factory = null;

            Console.Write("Enter the card type you would like to visit: ");
            string card = Console.ReadLine();

            switch (card.ToLower())
            {
            case "moneyback":
                factory = new MoneyBackFactory(50000, 0);
                break;

            case "titanium":
                factory = new TitaniumFactory(100000, 500);
                break;

            case "platinum":
                factory = new PlatinumFactory(500000, 1000);
                break;

            default:
                break;
            }

            CreditCard creditCard = factory.GetCreditCard();

            Console.WriteLine("\nYour card details are below : \n");
            Console.WriteLine("Card Type: {0}\nCredit Limit: {1}\nAnnual Charge: {2}",
                              creditCard.CardType, creditCard.CreditLimit, creditCard.AnnualCharge);
            Console.ReadKey();
        }
示例#3
0
        //Concrete meaning real or actual
        //Product and Creator
        //Then things as RealCreator and RealProduct
        //Factory method pattern falls under Creational Pattern of Gang of Four (GoF) Design Patterns.
        static void Main(string[] args)
        {
            CardFactory factory = null;

            Console.Write("Enter the card type you would like to visit: ");
            string car = Console.ReadLine();

            switch (car.ToLower())
            {
            case "moneyback":
                factory = new MoneyBackFactory(50000, 0);
                break;

            case "titanium":
                factory = new TitaniumFactory(100000, 500);
                break;

            case "platinum":
                factory = new PlatinumFactory(500000, 1000);
                break;

            default:
                break;
            }

            CreditCard creditCard = factory.GetCreditCard();

            Console.WriteLine("\nYour card details are below : \n");
            Console.WriteLine("Card Type: {0}\nCredit Limit: {1}\nAnnual Charge: {2}",
                              creditCard.CardType, creditCard.CreditLimit, creditCard.AnnualCharge);
            Console.ReadKey();
        }
示例#4
0
        static void Main(string[] args)
        {
            CartaoFactory cartaoFactory = null;

            Console.Write("Digite o tipo de cartão que gostaria de obter:");
            string console = Console.ReadLine();

            switch (console.ToLower())
            {
            case "black":
                cartaoFactory = new BlackFactory(50000, 0);
                break;

            case "titanium":
                cartaoFactory = new TitaniumFactory(100000, 500);
                break;

            case "platinum":
                cartaoFactory = new PlatinumFactory(500000, 1000);
                break;

            default:
                break;
            }

            CartaoCredito cartaoCredito = cartaoFactory.BuscarCartaoCredito();

            Console.WriteLine("\nOs detalhes do seu cartão estão abaixo: \n");
            Console.WriteLine("Tipo do Cartao: {0}\nCrédito limite: {1}\nCobrança Anual: {2}",
                              cartaoCredito.TipoCartao, cartaoCredito.LimiteCredito, cartaoCredito.CobrancaAnual);
            Console.ReadKey();
        }
示例#5
0
        static void Main(string[] args)
        {
            CreditCard 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 TitaniumFactory().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.ReadKey();
        }
示例#6
0
        public void Factory_pattern_test()
        {
            CardFactory factory  = null;
            string      cardType = "moneyback";

            switch (cardType.ToLower())
            {
            case "moneyback":
                factory = new MoneyBackFactory(50000, 0);
                break;

            case "titanium":
                factory = new TitaniumFactory(100000, 500);
                break;

            case "platinum":
                factory = new PlatinumFactory(500000, 1000);
                break;

            default:
                break;
            }

            CreditCard card = factory.GetCreditCard();

            Assert.AreEqual("MoneyBack", card.CardType);
            Assert.AreEqual(50000, card.CreditLimit);
            Assert.AreEqual(0, card.AnnualCharge);
        }
示例#7
0
        public void CreditCardFactoryMethod()
        {
            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();
        }
示例#8
0
        static void Main(string[] args)
        {
            string        console = null;
            string        x;
            CartaoFactory cartaoFactory = null;

            do
            {
                Console.WriteLine("\nISTO É APENAS UM TESTE\n");
                Console.WriteLine("Digite o tipo de cartão que deseja");
                Console.WriteLine("Opção 1 - Cartão Black");
                Console.WriteLine("Opção 2 - Cartão Platinum");
                Console.WriteLine("Opção 3 - Cartão Titanium");
                console = Console.ReadLine();


                if (console == "1" || console == "2" || console == "3" +
                    "")
                {
                    switch (console)
                    {
                    case "1":
                        cartaoFactory = new BlackFactory(50000, 0);
                        break;

                    case "2":
                        cartaoFactory = new PlatinumFactory(10000, 100);
                        break;

                    case "3":
                        cartaoFactory = new TitaniumFactory(150000, 150);
                        break;

                    default:
                        break;
                    }

                    CartaoCredito cartaoCredito = cartaoFactory.BuscarCartaoCredito();
                    Console.WriteLine("\nISTO É APENAS UM TESTE\n");
                    Console.WriteLine("\nObrigado por escolher o seu cartão");
                    Console.WriteLine("\nSegue a baixo os detalhes do seu cartão:\n");
                    Console.WriteLine("Tipo do cartão:{0}\nCrédito Limite:{1}\nCobrança Anual:{2}",
                                      cartaoCredito.TipoCartao, cartaoCredito.LimiteCredito, cartaoCredito.CobrancaAnual);
                    Console.WriteLine("\nDeseja continuar? S/N\n");
                    x = Console.ReadLine().ToUpper();
                }
                else
                {
                    Console.WriteLine("\nISTO É APENAS UM TESTE\n");
                    Console.WriteLine("\nNúmero inválido\n");
                    Console.WriteLine("\nDeseja continuar? S/N\n");
                    x = Console.ReadLine().ToUpper();
                    Console.WriteLine("\nISTO É APENAS UM TESTE\n");
                }
            }while (x == "S" || x == "SIM");

            Console.ReadKey();
        }
示例#9
0
        public void TestMethod1()
        {
            PlatinumFactory _factory;

            _factory = new PlatinumFactory(100000, 500);

            var value = _factory.GetCreditCard();

            Assert.AreEqual("Platinum", value.CardType);
            Assert.AreEqual(100000, value.CreditLimit);
            Assert.AreEqual(500, value.AnnualCharge);
        }
示例#10
0
        public void Test3()
        {
            PlatinumFactory fact;

            fact = new PlatinumFactory(500000, 1000);
            CreditCard card      = fact.GetCreditCard();
            string     expected1 = card.CardType;
            int        expected2 = card.CreditLimit;
            int        expected3 = card.AnnualCharge;
            string     actual1   = "Platinum";
            int        actual2   = 500000;
            int        actual3   = 1000;

            //Assert
            Assert.Equal(expected1, actual1);
            Assert.Equal(expected2, actual2);
            Assert.Equal(expected3, actual3);
        }
示例#11
0
        static void Main(string[] args)
        {
            Console.WriteLine("Factory Pattern");
            Console.WriteLine("The factory design pattern in C# is used to replace class constructors, abstracting the process of object generation so that the type of the object instantiated can be determined at run-time");
            Console.WriteLine();

            // Abstract implementation
            Console.WriteLine("Abstract implementation");

            Creator creator = new ConcreteCreator(); // You can not instantiate abstract classes
            Product product = creator.factoryMethod();

            product.Operation();

            Console.WriteLine();

            // Example implementation
            Console.WriteLine("Example implementation (credit cards)");

            CardFactory cardFactory;
            CreditCard  creditCard;

            cardFactory = new MoneyBackFactory(50000, 0);
            creditCard  = cardFactory.GetCreditCard();
            creditCard.PrintDetails();

            cardFactory = new TitaniumFactory(100000, 500);
            creditCard  = cardFactory.GetCreditCard();
            creditCard.PrintDetails();

            cardFactory = new PlatinumFactory(500000, 1000);
            creditCard  = cardFactory.GetCreditCard();
            creditCard.PrintDetails();

            Console.WriteLine();

            Console.ReadKey();
        }
示例#12
0
        public static void Main(string[] args)
        {
            Console.WriteLine("Creational Patterns deals with object creation!");
            Console.WriteLine("<---------------------------- Singleton ---------------------------->");
            Parallel.Invoke(() => { SimpleSingleton simpleSingleton = SimpleSingleton.Instance; },
                            () => { SimpleSingleton simpleSingleton = SimpleSingleton.Instance; });
            Parallel.Invoke(() => { ThreadSafeSingleton threadSafeSingleton = ThreadSafeSingleton.Instance; },
                            () => { ThreadSafeSingleton threadSafeSingleton = ThreadSafeSingleton.Instance; });
            Parallel.Invoke(() => { LazySingleton lazySingleton = LazySingleton.Instance; },
                            () => { LazySingleton lazySingleton = LazySingleton.Instance; });

            Console.WriteLine("<---------------------------- Simple Factory ---------------------------->");
            SimpleFactory.ICreditCard card = SimpleFactory.CreditCardFactory.GetCreditCard(SimpleFactory.CreditCardType.Platinum);
            Console.WriteLine($"Credit card Type: {card.GetCardType()}");
            Console.WriteLine($"Credit card Limit: {card.GetLimit()}");
            Console.WriteLine($"Credit card AnnualCharges: {card.GetAnnualCharges()}");

            card = SimpleFactory.CreditCardFactory.GetCreditCard(SimpleFactory.CreditCardType.Titanium);
            Console.WriteLine($"Credit card Type: {card.GetCardType()}");
            Console.WriteLine($"Credit card Limit: {card.GetLimit()}");
            Console.WriteLine($"Credit card AnnualCharges: {card.GetAnnualCharges()}");

            Console.WriteLine("<---------------------------- Factory Method ---------------------------->");
            FactoryMethod.CreditCardFactory creditCardFactory = new PlatinumFactory();
            FactoryMethod.ICreditCard       creditCard        = creditCardFactory.GetCreditCard();
            Console.WriteLine($"Credit card Type: {creditCard.GetCardType()}");
            Console.WriteLine($"Credit card Limit: {creditCard.GetLimit()}");
            Console.WriteLine($"Credit card AnnualCharges: {creditCard.GetAnnualCharges()}");

            creditCardFactory = new TitaniumFactory();
            creditCard        = creditCardFactory.GetCreditCard();
            Console.WriteLine($"Credit card Type: {creditCard.GetCardType()}");
            Console.WriteLine($"Credit card Limit: {creditCard.GetLimit()}");
            Console.WriteLine($"Credit card AnnualCharges: {creditCard.GetAnnualCharges()}");

            Console.WriteLine("<---------------------------- Abstract Factory ---------------------------->");
            ComputerFactory computerFactory = new ComputerFactory(new ExpensiveComputer());

            computerFactory.Assemble();
            computerFactory = new ComputerFactory(new CheapComputer());
            computerFactory.Assemble();

            Console.WriteLine("<---------------------------- Builder ---------------------------->");
            Builder.IComputer computer = new Builder.LaptopBuilder();
            computer.AddCPU("Intel I3");
            computer.AddGPU("AMD Rideon");
            computer.AddRAM("8 GB");
            computer.AddHDD("SATA 500 GB");
            computer.EanbleTouchscreen(true);
            computer.DisplayDetails();

            computer = new Builder.DesktopBuilder();
            computer.AddCPU("Intel I5");
            computer.AddGPU("NVidea");
            computer.AddRAM("16 GB");
            computer.AddHDD("SATA 1 TB");
            computer.AddMonitor("Full HD");
            computer.DisplayDetails();

            Console.WriteLine("<---------------------------- Fluent Builder ---------------------------->");
            FluentBuilder.IComputer computer1 = new FluentBuilder.LaptopBuilder();
            computer1.AddCPU("Intel I3")
            .AddGPU("AMD Rideon")
            .AddRAM("8 GB")
            .AddHDD("SATA 500 GB")
            .EanbleTouchscreen(true)
            .DisplayDetails();

            computer1 = new FluentBuilder.DesktopBuilder();
            computer1.AddCPU("Intel I5")
            .AddGPU("NVidea")
            .AddRAM("16 GB")
            .AddHDD("SATA 1 TB")
            .AddMonitor("Full HD")
            .DisplayDetails();

            Console.ReadLine();
        }