首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >这是工厂设计模式在C#中的实现吗?

这是工厂设计模式在C#中的实现吗?
EN

Code Review用户
提问于 2020-06-19 08:06:36
回答 1查看 106关注 0票数 0

这是我创建信用卡的类库代码。

代码语言:javascript
复制
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);
    }
}

用户界面将是:

代码语言:javascript
复制
    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#中的实现吗?

EN

回答 1

Code Review用户

发布于 2020-06-19 13:46:06

在您的实现中,您粉碎了两个不同的角色:ProductCreator

您的实现相当于以下内容:

代码语言:javascript
复制
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;
    }
}

或者几乎是这样的(这提供了更多的灵活性):

代码语言:javascript
复制
public class GoldCreditCard : CreditCard
{
    public GoldCreditCard(decimal creditLimit = 15000, decimal annualCharge = 100)
    {
        CardType = CardType.Gold;
        CreditLimit = creditLimit;
        AnnualCharge = annualCharge;
    }
}

模式的全部要点是,只有Creator (Factory)知道如何设置具体的产品。在您的例子中,您的类知道如何初始化自己。

票数 2
EN
页面原文内容由Code Review提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codereview.stackexchange.com/questions/244153

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档