设计模式学习笔记-策略模式

策略模式:Strategy,它定义了算法家族,分别封装起来,让他们之间可以相互替换,让算法的变化不会影响到算法使用者

1.定义抽象算法

复制代码
    /// <summary>
/// 抽象算法类
/// </summary>
abstract class Strategy
{
/// <summary>
/// 算法方法 接口定义
/// </summary>
public abstract void AlgorithmInterface();
}
复制代码

2.具体算法的实现

复制代码
  /// <summary>
/// 具体算法A
/// </summary>
class ConcreteStrategyA : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(
"算法A的实现");
}
}
/// <summary>
/// 具体算法B
/// </summary>
class ConcreteStrategyB : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(
"算法B的实现");
}
}
/// <summary>
/// 具体算法C
/// </summary>
class ConcreteStrategyC : Strategy
{
public override void AlgorithmInterface()
{
Console.WriteLine(
"算法C的实现");
}
}
复制代码

3.调度类

复制代码
    /// <summary>
/// 承上启下的算法调用
/// </summary>
class Context
{
Strategy strategy;
/// <summary>
/// 传入具体策略对象
/// </summary>
/// <param name="strategy"></param>
public Context(Strategy strategy)
{
this.strategy = strategy;
}
/// <summary>
/// 根据策略对象的值判断调用的算法类
/// </summary>
public void ContextInterface()
{
strategy.AlgorithmInterface();
}
}
复制代码

  客户端调用:

复制代码
        /// <summary>
/// 测试策略
/// </summary>
static void TestStrategy()
{
Context context;
//策略A
context = new Context(new ConcreteStrategyA());
context.ContextInterface();
//策略B
context = new Context(new ConcreteStrategyB());
context.ContextInterface();
//策略C
context = new Context(new ConcreteStrategyC());
context.ContextInterface();
Console.Read();
}
复制代码

  策略模式比较简单但是应用非常的多


posted @   叶鹏  阅读(680)  评论(0编辑  收藏  举报
编辑推荐:
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
阅读排行:
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
点击右上角即可分享
微信分享提示