首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >专栏 >策略模式与委托实战指南:用C#实现动态税务计算系统

策略模式与委托实战指南:用C#实现动态税务计算系统

作者头像
郑子铭
发布2025-05-19 10:23:24
发布2025-05-19 10:23:24
12500
代码可运行
举报
运行总次数:0
代码可运行
Image
Image
本教程将掌握两大核心技能:C#中的策略模式与委托,并通过实战案例演示实时应用方法。

策略模式解析

当需要在运行时动态切换多种算法且不修改客户端代码时,策略模式(Strategy Pattern)能完美解决问题。在.NET Core中,这种行为型设计模式通过定义算法族、封装算法并使其可互换来实现灵活性。

典型应用场景

  1. 1. 按需税务计算:根据国家/地区动态切换税率规则
  2. 2. 灵活排序算法:根据需求切换快速排序、归并排序等算法

核心优势: • 封装性:隔离不同策略的实现 • 开闭原则:新增策略无需修改既有代码 • 解耦设计:降低算法间的依赖 • 易测试性:各策略可独立测试


基础实现:无委托的税务计算系统

步骤1:定义税率计算逻辑接口与实现

代码语言:javascript
代码运行次数:0
运行
复制
public interfaceITaxStrategy
{  
    decimal CalculateTax(decimal amount);  
}  

publicclassUSTax : ITaxStrategy
{  
    public decimal CalculateTax(decimal amount) => amount * 0.07m; // 7%税率  
}  

publicclassUKTax : ITaxStrategy
{  
    public decimal CalculateTax(decimal amount) => amount * 0.2m; // 20%增值税  
}  

步骤2:创建策略调度中心类

代码语言:javascript
代码运行次数:0
运行
复制
public class TaxApply  
{  
    private ITaxStrategy _taxStrategy;  

    public void SetTaxStrategy(ITaxStrategy strategy) => _taxStrategy = strategy;  

    public decimal CalculateTax(decimal amount) => _taxStrategy.CalculateTax(amount);  
}  

步骤3:运行时动态注入策略

代码语言:javascript
代码运行次数:0
运行
复制
// appsettings.json  
{  
"TaxSettings": {  
    "Country": "US"// 可动态切换为"UK"或"India"  
  }  
}  

classProgram
{  
    static void Main()
    {  
        var config = new ConfigurationBuilder()  
            .AddJsonFile("appsettings.json")  
            .Build();  

        string country = config["TaxSettings:Country"];  

        var taxApply = new TaxApply();  

        if(country == "US")  
        {  
            taxApply.SetTaxStrategy(new USTax());  
            Console.WriteLine($"US Tax: {taxApply.CalculateTax()}");  
        }  

        if(country == "UK")  
        {  
            taxApply.SetTaxStrategy(new UKTax());  
            Console.WriteLine($"UK Tax: {taxApply.CalculateTax()}");  
        }  
    }  
}  

进阶实现:委托驱动的动态税务系统

步骤1:定义税率计算类

代码语言:javascript
代码运行次数:0
运行
复制
public classUSTax
{  
    public decimal Calculate(decimal amount) => amount * 0.07m;  
}  

publicclassUKTax
{  
    public decimal Calculate(decimal amount) => amount * 0.2m;  
}  

publicclassIndiaTax
{  
    public decimal Calculate(decimal amount) => amount * 0.18m;  
}  

步骤2:声明委托类型

代码语言:javascript
代码运行次数:0
运行
复制
public delegate decimal TaxStrategy(decimal amount);  

步骤3:构建委托调度中心

代码语言:javascript
代码运行次数:0
运行
复制
public class TaxApply  
{  
    private TaxStrategy _taxStrategy;  

    public void SetTaxStrategy(TaxStrategy strategy) => _taxStrategy = strategy;  

    public decimal ExecuteTaxCalculation(decimal amount) => _taxStrategy?.Invoke(amount) ?? ;  
}  

步骤4:动态策略注入实战

代码语言:javascript
代码运行次数:0
运行
复制
class Program
{  
    static void Main()
    {  
        var config = new ConfigurationBuilder()  
            .AddJsonFile("appsettings.json")  
            .Build();  

        string country = config["TaxSettings:Country"];  
        decimal amount = m;  

        var taxApply = new TaxApply();  

        switch(country.ToUpper())  
        {  
            case"US":  
                taxApply.SetTaxStrategy(new USTax().Calculate);  
                break;  
            case"UK":  
                taxApply.SetTaxStrategy(new UKTax().Calculate);  
                break;  
            case"INDIA":  
                taxApply.SetTaxStrategy(new IndiaTax().Calculate);  
                break;  
            default:  
                Console.WriteLine("无效国家配置");  
                return;  
        }  

        Console.WriteLine($"{country}税额: {taxApply.ExecuteTaxCalculation(amount)}");  
    }  
}  

极简委托实现方案

代码语言:javascript
代码运行次数:0
运行
复制
class Program
{  
    public delegate decimal TaxStrategy(decimal amount);  

    static decimal USTax(decimal amount) => amount * 0.07m;  
    static decimal UKTax(decimal amount) => amount * 0.2m;  
    static decimal IndiaTax(decimal amount) => amount * 0.18m;  

    static void Main()
    {  
        TaxStrategy taxMethod = USTax;  
        Console.WriteLine($"美国税额: {taxMethod()}");  

        taxMethod = UKTax;  
        Console.WriteLine($"英国税额: {taxMethod()}");  
    }  
}  

通过本文,我们掌握了:
  1. 1. 策略模式在动态算法切换中的实战应用
  2. 2. 委托机制如何简化策略模式的实现
  3. 3. 配置驱动的运行时策略注入技巧
  4. 4. 两种实现方案的优劣对比(接口 vs 委托)
本文参与 腾讯云自媒体同步曝光计划,分享自微信公众号。
原始发表:2025-05-19,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 DotNet NB 微信公众号,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 本教程将掌握两大核心技能:C#中的策略模式与委托,并通过实战案例演示实时应用方法。
  • 策略模式解析
  • 基础实现:无委托的税务计算系统
  • 进阶实现:委托驱动的动态税务系统
  • 通过本文,我们掌握了:
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档