예제 #1
0
        public void Start()
        {
            ICreditCard _creditCardDetail = CardFactory.GetCreditCardInstance(CardType.Platinum);

            Console.WriteLine($"CardType:{_creditCardDetail.GetCardType()}" +
                              $"\n CreditLimit: {_creditCardDetail.GetCreditLimit()}" +
                              $"\n AnnualAverage: {_creditCardDetail.GetAnnualCharge()}");
        }
        static void Main(string[] args)
        {
            /*Problem - Usual Program execution */
            //Generally we will get the Card Type from UI.
            //Here we are hardcoded the card type
            string      cardType    = "MoneyBack";
            ICreditCard cardDetails = null;

            //Based of the CreditCard Type we are creating the
            //appropriate type instance using if else condition
            if (cardType == "MoneyBack")
            {
                cardDetails = new MoneyBack();
            }
            else if (cardType == "Titanium")
            {
                cardDetails = new Titanium();
            }
            else if (cardType == "Platinum")
            {
                cardDetails = new Platinum();
            }
            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            /*Problem End here*/

            /*Solution - Implementing Factory pattern*/
            ICreditCard cardDetailsSolution = CreditCardFactoryPattern.GetCreditCard("Platinum");

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetailsSolution.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetailsSolution.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetailsSolution.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            /* Solution End Here*/

            Console.ReadLine();
        }
예제 #3
0
        static void Main(string[] args)
        {
            ICreditCard m_CreditCard = null;

            Console.WriteLine("Please Choose your credit card type (0,1,2)");
            CreditCardType x = (CreditCardType)Enum.Parse(typeof(CreditCardType), Console.ReadLine());

            switch (x)
            {
            case CreditCardType.MoneyBack:
                m_CreditCard = new MoneyBack();
                break;

            case CreditCardType.Titanuim:
                m_CreditCard = new Titanium();
                break;

            case CreditCardType.Platinum:
                m_CreditCard = new Platinum();
                break;

            default:
                break;
            }

            Console.WriteLine("First Without use Factory Design Patterns");
            Console.WriteLine("");
            Console.WriteLine($"Card Type is {m_CreditCard?.GetCardType() ?? "Invalid card"}");
            Console.WriteLine($"Credit Limit is {m_CreditCard?.GetCreditLimit() ?? 0}");
            Console.WriteLine($"Annual Charge is {m_CreditCard?.GetAnnualCharge() ?? 0}");

            Console.WriteLine("");
            Console.WriteLine("*************************************************************");
            Console.WriteLine("");

            Console.WriteLine("Second Use Factory Design Patterns");
            Console.WriteLine("");
            ICreditCard creditCardFactory = CreditCardFactory.GetCreditCard(x);

            if (x == CreditCardType.MoneyBack)
            {
                ((MoneyBack)creditCardFactory).GetAnnualCharge
                Console.WriteLine($"Card Type is {creditCardFactory?.GetCardType() ?? "Invalid card"}");
            }
            Console.WriteLine($"Credit Limit is {creditCardFactory?.GetCreditLimit() ?? 0}");
            Console.WriteLine($"Annual Charge is {creditCardFactory?.GetAnnualCharge() ?? 0}");

            Console.ReadLine();
        }
        public static void UsingFactoryDP()
        {
            ICreditCard cardDetails = CreditCardFactory.GetCardInstance("Platinum");

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
        }
예제 #5
0
        public void CreditCardPattern()
        {
            ICreditCard cardDetails = CreditCardFactory.GetCreditCard("Platinum");

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            Console.ReadLine();
        }
예제 #6
0
        static void Main(string[] args)
        {
            int         cardType    = Convert.ToInt32(Console.ReadLine());
            ICreditCard cardDetails = CardFactory.GetCardInstance(cardType);

            if (cardDetails != null)
            {
                Console.WriteLine("Card Type: " + cardDetails.GetCardType());
                Console.WriteLine("Card Limit: " + cardDetails.GetCreditLimit());
                Console.WriteLine("Card Annual Charge: " + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.WriteLine("Invalid Card Type.");
            }
            Console.ReadLine();
        }
예제 #7
0
        static void Main(string[] args)
        {
            Console.WriteLine("Hello Factory Design , This factory desing pattern implementation");
            ICreditCard cardDetails = CreditCardFactory.GetCreditCard(CreditCardType.Platinum);

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }

            Console.ReadLine();
        }
예제 #8
0
        static void Main(string[] args)
        {
            int cardType = 2;
            //Getting the instance from the factory class

            ICreditCard cardDetails = CardFactory.GetCardInstance(cardType);

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            Console.ReadLine();
        }
예제 #9
0
        private static void Main(string[] args)
        {
            //Generally we will get the Card Type from UI.
            //Here we are hardcoded the card type

            ICreditCard cardDetails = CreditCardFactory.GetCreditCard("MoneyBack");

            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            Console.ReadLine();
        }
        public async Task <ActionResult <CardDetailsViewModel> > GetCardDetails(int id, string type)
        {
            //Get Card Type


            switch (type)
            {
            case "MoneyBack":
                _creditCard = new MoneyBackService();
                break;

            case "Platinum":
                _creditCard = new PlatinumService();
                break;

            case "Titanium":
                _creditCard = new TitaniumService();
                break;
            }
            CardDetailsViewModel cardDetailsViewModel = new CardDetailsViewModel();

            if (id != 0)
            {
                cardDetailsViewModel.CardType         = _creditCard.GetCardType(id);
                cardDetailsViewModel.CardLimit        = _creditCard.GetCreditLimit(id);
                cardDetailsViewModel.CardAnnualCharge = _creditCard.GetAnnualCharge(id);
            }
            if (string.IsNullOrEmpty(cardDetailsViewModel.CardType) && cardDetailsViewModel.CardLimit == 0 && cardDetailsViewModel.CardAnnualCharge == 0)
            {
                cardDetailsViewModel = null;
            }

            if (cardDetailsViewModel == null)
            {
                return(NotFound());
            }
            else
            {
                return(cardDetailsViewModel);
            }
        }
예제 #11
0
 static void ShowCreditCard(ICreditCard c)
 {
     Console.WriteLine($"CardType: {c.GetCardType()}; Limit: {c.GetCreditLimit()}; AnnualCharge: {c.GetAnnualCharge()}% ");
 }
예제 #12
0
        static void Main(string[] args)
        {
            Console.WriteLine("--------------Singleton--------------");

            //Singleton
            Parallel.Invoke(
                () => PrintStudentDetails(),
                () => PrintEmployeeDetails()
                );
            Console.WriteLine("--------------");

            //Simple Factory Design Pattern
            Console.WriteLine("--------------Simple Factory Design Pattern--------------");

            int         cardType    = 1;
            ICreditCard cardDetails = CardFactory.GetCardInstance(cardType);;


            if (cardDetails != null)
            {
                Console.WriteLine("CardType : " + cardDetails.GetCardType());
                Console.WriteLine("CreditLimit : " + cardDetails.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + cardDetails.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            Console.WriteLine("--------------");

            //Simple Factory Method Design Pattern
            Console.WriteLine("--------------Simple Factory Method Design Pattern--------------");

            SFMDP.ICreditCard CreditCardInstance = new SFMDP.PlatinumCreditCardFactory().CreateProduct();
            if (CreditCardInstance != null)
            {
                Console.WriteLine("CardType : " + CreditCardInstance.GetCardType());
                Console.WriteLine("CreditLimit : " + CreditCardInstance.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + CreditCardInstance.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            CreditCardInstance = new SFMDP.TitaniumCreditCardFactory().CreateProduct();
            if (CreditCardInstance != null)
            {
                Console.WriteLine("CardType : " + CreditCardInstance.GetCardType());
                Console.WriteLine("CreditLimit : " + CreditCardInstance.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + CreditCardInstance.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }

            Console.WriteLine("--------------Providing another layer of Abstraction--------------");

            //Providing another layer of Abstraction:
            // In the above example, we directly call the CreateProduct method on a particular factory class instance to get the actual product instance.What if I need to create the product instance based on the card type value that I received from the user.If this is your requirement, then you need to create another simple factory class as shown below.Create a class with the name CreditCardFactory and then copy and paste the following code.

            //Setting the Card Type value
            int CreditCardType = 1;

            //This is going to return an instance of a Particular Card type object
            CreditCardInstance = new SFMDP.CreditCardFactory().CreateObject(CreditCardType);
            if (CreditCardInstance != null)
            {
                Console.WriteLine("CardType : " + CreditCardInstance.GetCardType());
                Console.WriteLine("CreditLimit : " + CreditCardInstance.GetCreditLimit());
                Console.WriteLine("AnnualCharge :" + CreditCardInstance.GetAnnualCharge());
            }
            else
            {
                Console.Write("Invalid Card Type");
            }
            Console.WriteLine("--------------");

            Console.WriteLine("------Abolish Switch Case--------");
            SwitchCase switchCase = new SwitchCase();

            switchCase.Type = "Type0";
            Console.WriteLine($"Type :: {switchCase.Type} Value :: {switchCase.GetNewValueBasedOnType(1)}");
            switchCase.Type = "Type1";
            Console.WriteLine($"Type :: {switchCase.Type} Value :: {switchCase.GetNewValueBasedOnType(1)}");
            switchCase.Type = "Type2";
            Console.WriteLine($"Type :: {switchCase.Type} Value :: {switchCase.GetNewValueBasedOnType(1)}");

            var entityFactory = new EntityFactory();
            var entity        = entityFactory.GetEntityBasedOnType(EntityType.Type0);
            var result        = entity.GetNewValue(1);

            Console.WriteLine(result);
            entity = entityFactory.GetEntityBasedOnType(EntityType.Type1);
            result = entity.GetNewValue(1);
            Console.WriteLine(result);
            entity = entityFactory.GetEntityBasedOnType(EntityType.Type2);
            result = entity.GetNewValue(1);
            Console.WriteLine(result);
            Console.WriteLine("--------------");
            Console.ReadLine();
        }
예제 #13
0
 static void Print(ICreditCard crediCard)
 {
     Console.WriteLine(crediCard.GetCardType());
     Console.WriteLine(crediCard.GetCreditLimit());
     Console.WriteLine(crediCard.GetAnualFee());
 }