这是我创建信用卡的类库代码。
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;
}
///
/// Factory pattern
///
///
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;
}
///
/// Factory pattern
///
///
public static CreditCard Create()
{
return new TitaniumCreditCard(creditLimit: 30000, annualCharge: 250);
}
}用户界面将是:
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}.");
}这是工厂设计模式在C#中的实现吗?
发布于 2020-06-19 13:46:06
在您的实现中,您粉碎了两个不同的角色:Product和Creator。
您的实现相当于以下内容:
public class GoldCreditCard : CreditCard
{
private GoldCreditCard(decimal creditLimit, decimal annualCharge)
{
CardType = CardType.Gold;
CreditLimit = creditLimit;
AnnualCharge = annualCharge;
}
public GoldCreditCard()
{
CardType = CardType.Gold;
CreditLimit = 15000;
AnnualCharge = 100;
}
}或者几乎是这样的(这提供了更多的灵活性):
public class GoldCreditCard : CreditCard
{
public GoldCreditCard(decimal creditLimit = 15000, decimal annualCharge = 100)
{
CardType = CardType.Gold;
CreditLimit = creditLimit;
AnnualCharge = annualCharge;
}
}模式的全部要点是,只有Creator (Factory)知道如何设置具体的产品。在您的例子中,您的类知道如何初始化自己。
https://codereview.stackexchange.com/questions/244153
复制相似问题