Here are my class library code which create credit card.
public abstract class CreditCard
{
public CardType CardType { get; protected set; }
public decimal CreditLimit { get; protected set; }
public decimal AnnualCharge { get; protected set; }
}
public class GoldCreditCard : CreditCard
{
private GoldCreditCard(decimal creditLimit, decimal annualCharge)
{
CardType = CardType.Gold;
CreditLimit = creditLimit;
AnnualCharge = annualCharge;
}
/// <summary>
/// Factory pattern
/// </summary>
/// <returns></returns>
public static CreditCard Create()
{
return new GoldCreditCard(creditLimit: 15000, annualCharge: 100);
}
}
public class TitaniumCreditCard : CreditCard
{
private TitaniumCreditCard(decimal creditLimit, decimal annualCharge)
{
CardType = CardType.Titanium;
CreditLimit = creditLimit;
AnnualCharge = annualCharge;
}
/// <summary>
/// Factory pattern
/// </summary>
/// <returns></returns>
public static CreditCard Create()
{
return new TitaniumCreditCard(creditLimit: 30000, annualCharge: 250);
}
}
and the ui will be:
static void Main(string[] args)
{
CreditCard card;
System.Console.WriteLine("Select your card type");
System.Console.WriteLine("1. Gold Credit Card");
System.Console.WriteLine("2. Titanium Credit Card");
var option = System.Console.ReadLine();
switch (option)
{
case "1":
card = GoldCreditCard.Create();
PrintCard(card);
break;
case "2":
card = TitaniumCreditCard.Create();
PrintCard(card);
break;
default:
break;
}
}
static void PrintCard(CreditCard card)
{
System.Console.WriteLine($"Your credit card has been successfully created.");
System.Console.WriteLine($"The credit card type is {card.CardType}.");
System.Console.WriteLine($"The credit card limit is {card.CreditLimit:C}.");
System.Console.WriteLine($"The credit card annual fee is {card.AnnualCharge:C}.");
}
Is this implementation of factory design pattern in C#?