zoukankan      html  css  js  c++  java
  • 工厂模式-C#改良实现

    参考了下网上的工厂模式实现,总的来说例子还是OK得,但是示例太单一了,因此我做了下优化的改良实现。

    namespace DP
    {
        public interface ICreditCard
        {
            string GetCardType();
            int GetCreditLimit();
            int GetAnnualCharge();
        }
    
        //Concrete Product 1
        public class MoneyBackCreditCard : ICreditCard
        {
            public string GetCardType()
                => "MoneyBack";
            public int GetCreditLimit()
                => 15000;
            public int GetAnnualCharge()
                => 500;
        }
        //Concrete Product 2
        public class TitaniumCreditCard : ICreditCard
        {
            public string GetCardType()
                => "Titanium";
            public int GetCreditLimit()
                => 25000;
            public int GetAnnualCharge()
                => 1500;
        }
        //Concrete Product 3
        public class PlatinumCreditCard : ICreditCard
        {
            public string GetCardType() => "Platinum";
            public int GetCreditLimit() => 35000;
            public int GetAnnualCharge() => 2000;
        }
        
        public abstract class CreditCardFactory
        {
            protected abstract ICreditCard MakeProduct();
    
            public ICreditCard CreateCreditCard() => MakeProduct();
        }
    
        public class MoneyBackFactory : CreditCardFactory
        {
            protected override ICreditCard MakeProduct() => new MoneyBackCreditCard();
        }
    
        public class PlatinumFactory : CreditCardFactory
        {
            protected override ICreditCard MakeProduct() => new PlatinumCreditCard();
        }
    
    
        public class TitaniumFactory : CreditCardFactory
        {
            protected override ICreditCard MakeProduct() => new TitaniumCreditCard();
        }
    
    }
    

    客户端调用:

    ICreditCard CreditCardInstance = new PlatinumFactory().CreateCreditCard();
    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("--------------");
    CreditCardInstance = new MoneyBackFactory().CreateCreditCard();
    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.Read();
    

    参考资料:Factory Method Design Pattern in C#
    相比较来讲,此示例更贴近实际的业务开发及逻辑,有助于理解工厂模式在业务开发中的应用。

  • 相关阅读:
    CCF认证201809-2买菜
    git删除本地保存的账号和密码
    mysql表分区
    使用java代码将时间戳和时间互相转换
    Mysql数据库表被锁定处理
    mysql查询某个数据库表的数量
    编译nginx错误:make[1]: *** [/pcre//Makefile] Error 127
    LINUX下安装pcre出现WARNING: 'aclocal-1.15' is missing on your system错误的解决办法
    linux下安装perl
    [剑指Offer]26-树的子结构
  • 原文地址:https://www.cnblogs.com/zhiyong-ITNote/p/10917132.html
Copyright © 2011-2022 走看看