.NET 设计模式—策略模式(Strategy Pattern)

简介

策略模式是一种行为设计模式,它允许在运行时选择算法的行为。这种模式定义了一系列算法,并将每个算法封装到一个对象中,使得它们可以互相替换。策略模式使得算法可以独立于使用它的客户端而变化,提供了灵活性、可扩展性和复用性。

角色

  • 抽象策略角色(Strategy):定义了一个公共接口,各种不同的算法以不同的方式实现这个接口。
  • 具体策略角色(ConcreteStrategy):实现了Strategy定义的接口,提供具体的算法实现。
  • 环境角色(Context):持有一个Strategy类的引用,需要使用ConcreteStrategy提供的算法。内部维护一个Strategy的实例,负责动态设置运行时Strategy具体的实现算法,并负责跟Strategy之间的交互和数据传递。

优点

  • 算法可以自由切换。
  • 避免使用多重条件判断。
  • 扩展性良好。

缺点

  • 策略类会增多。
  •  所有策略类都需要对外暴露。

应用场景

  •  如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。
  • 一个系统需要动态地在几种算法中选择一种。
  • 如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

实现

在.NET中实现策略模式,首先定义一个策略接口,然后创建实现该接口的具体策略类。在策略执行的上下文中,可以根据需要选择或切换不同的策略实现。

// 策略接口
public interface ICalculationStrategy
{
    int Calculate(int a, int b);
}
 
// 具体策略:加法
public class AdditionStrategy : ICalculationStrategy
{
    public int Calculate(int a, int b)
    {
        return a + b;
    }
}
 
// 具体策略:减法
public class SubtractionStrategy : ICalculationStrategy
{
    public int Calculate(int a, int b)
    {
        return a - b;
    }
}
 
// 策略上下文
public class CalculationContext
{
    private ICalculationStrategy _strategy;
 
    public CalculationContext(ICalculationStrategy strategy)
    {
        _strategy = strategy;
    }
 
    public int Calculate(int a, int b)
    {
        return _strategy.Calculate(a, b);
    }
}
 
// 使用策略模式的示例
public class Program
{
    public static void Main(string[] args)
    {
        ICalculationStrategy addStrategy = new AdditionStrategy();
        ICalculationStrategy subStrategy = new SubtractionStrategy();
 
        CalculationContext context = new CalculationContext(addStrategy);
        int result = context.Calculate(10, 5);
        Console.WriteLine($"加法结果: {result}"); // 输出应为 15
 
        context = new CalculationContext(subStrategy);
        result = context.Calculate(10, 5);
        Console.WriteLine($"减法结果: {result}"); // 输出应为 5
    }
}

相关推荐

  1. .NET 设计模式策略模式(Strategy Pattern)

    2024-04-13 06:18:07       39 阅读
  2. 设计模式——策略模式

    2024-04-13 06:18:07       48 阅读
  3. 设计模式-策略模式

    2024-04-13 06:18:07       59 阅读
  4. 设计模式——策略模式

    2024-04-13 06:18:07       47 阅读

最近更新

  1. docker php8.1+nginx base 镜像 dockerfile 配置

    2024-04-13 06:18:07       98 阅读
  2. Could not load dynamic library ‘cudart64_100.dll‘

    2024-04-13 06:18:07       106 阅读
  3. 在Django里面运行非项目文件

    2024-04-13 06:18:07       87 阅读
  4. Python语言-面向对象

    2024-04-13 06:18:07       96 阅读

热门阅读

  1. Docker 安装Kali Linux作为攻防演练的工具

    2024-04-13 06:18:07       55 阅读
  2. 设计模式-策略模式

    2024-04-13 06:18:07       40 阅读
  3. docker部署chatgpt步骤

    2024-04-13 06:18:07       44 阅读
  4. 数据结构_基于链表的通讯录

    2024-04-13 06:18:07       46 阅读
  5. ChatGPT让论文写作更高效,让学术研究更精彩

    2024-04-13 06:18:07       43 阅读
  6. Conda 常用命令总结

    2024-04-13 06:18:07       41 阅读
  7. ChatGPT:打破论文写作传统,开启智能时代

    2024-04-13 06:18:07       38 阅读
  8. HiveSQL基础Day03

    2024-04-13 06:18:07       31 阅读
  9. 通过 Vue 3 组合式 API 优化 Uni-app 基础页面功能

    2024-04-13 06:18:07       103 阅读