策略模式(Stragety Pattern)

文章目录

1.定义

策略模式是一种行为设计模式, 它能让你定义一系列算法, 并将每种算法分别放入独立的类中, 以使算法的对象能够相互替换。

2.结构

  • 上下文 (Context) :维护指向具体策略的引用, 且仅通过策略接口与该对象进行交流
  • 策略 (Strategy) : 接口是所有具体策略的通用接口, 它声明了一个上下文用于执行策略的方法
  • 具体策略 (Concrete Strategies) : 实现了上下文所用算法的各种不同变体
  • 客户端 (Client) : 会创建一个特定策略对象并将其传递给上下文。 上下文则会提供一个设置器以便客户端在运行时替换相关联的策略

3.代码实现

实现一个计算策略:

  • 策略类接口(Strategy):
csharp 复制代码
// 计算策略
public interface IConcreteStragety
{
    double Execute(double a, double b);
}
  • 具体策略类(Concrete Strategies):
csharp 复制代码
// 加法策略
public class ConcreteStrategyAdd : IConcreteStragety
{
    public double Execute(double a, double b)
    {
        return a + b;
    }
}

// 减法策略
public class ConcreteStrategySubtract : IConcreteStragety
{
    public double Execute(double a, double b)
    {
        return a - b;
    }
}

// 乘法策略
public class ConcreteStrategyMultiply : IConcreteStragety
{
    public double Execute(double a, double b)
    {
        return a * b;
    }
}
  • 上下文 (Context):
csharp 复制代码
public class StragetyContext
{
    private IConcreteStragety stragety;

    public StragetyContext(IConcreteStragety stragety)
    {
        this.stragety = stragety;
    }

    public void SetTaxStragety(IConcreteStragety stragety)
    {
        this.stragety = stragety;
    }

    public double ExecuteStrategy(double a, double b)
    {
        return stragety.Execute(a, b);
    }
}
  • 客户端 (Client):
csharp 复制代码
StragetyContext context = new StragetyContext(new ConcreteStrategyAdd());
Console.WriteLine("加法策略:{0}", context.ExecuteStrategy(20, 10));

context.SetTaxStragety(new ConcreteStrategySubtract());
Console.WriteLine("减法策略:{0}", context.ExecuteStrategy(20, 10));

context.SetTaxStragety(new ConcreteStrategyMultiply());
Console.WriteLine("乘法策略:{0}", context.ExecuteStrategy(20, 10));
  • 结果

加法策略:30

减法策略:10

乘法策略:200

相关推荐
snakecy3 小时前
macOS 安装 LaTeX 全流程指南:从 MacTeX 到中文排版
macos·策略模式
阿松爱学习5 小时前
【Unity开发】Unity长截图功能实现
unity·c#·游戏引擎
是2的10次方啊6 小时前
设计模式与生活①:你的脸,为什么不能有第二个?
设计模式
_oP_i8 小时前
Windows 11 家庭中文版 25H2
c#
unicrom_深圳市由你创科技8 小时前
电池化成曲线MES追溯:关键点提取与验证
c#
老王IT8 小时前
C#语言基础语法介绍
开发语言·c#
高晶8 小时前
ARM 嵌入式 Linux 命令系统 BusyBox 实战指南
linux·设计模式·程序员
高晶9 小时前
语音合成与变声技术十大业务场景落地实战:从电商直播到规模化生产
设计模式·程序员
人丰9 小时前
一次生产卡顿复盘:BI 数据抽取引发 PostgreSQL 长事务事故
数据库·c#
淡海水11 小时前
07-01-源码-.NET Core GC总览与架构
unity·架构·c#·.netcore·gc