前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
工具
TVP
发布
社区首页 >专栏 >设计模式之策略模式

设计模式之策略模式

作者头像
beginor
发布2020-08-10 11:24:49
1990
发布2020-08-10 11:24:49
举报

设计模式之策略模式

结构

策略模式
策略模式

说明

Define a family of algorithms, encapsulate each one, and make them interchangeable. Strategy lets the algorithm vary independently from clients that use it.

定义一个算法的系列,将其各个分装,并且使他们有交互性。策略模式使得算法在用户使用的时候能独立的改变。

适用条件

  • 算法有多个变体可供使用;
  • 多个相似的类仅仅因为行为不同, 这时可以将这些类合并并采用行为模式处理这些行为;
  • 一个类中的某个行为有过多的分支, 这时可以将这些行为封装成不同的算法;
  • 希望隐藏算法中采用的数据;

实现

代码语言:javascript
复制
public interface IStrategy {

   int Execute(int a, int b);

}

public class AddStrategy : IStrategy {
   
   public int Execute(int a, int b) {
      return a + b;
   }
}

public class SubstractStrategy : IStrategy {
   
   public int Execute(int a, int b) {
      return a - b;
   }
}

public class MultiplyStrategy : IStrategy {
   
   public int Execute(int a, int b) {
      return a * b;
   }
}

public class Context {
   
   private readonly IStrategy _strategy;

   public Context(IStrategy strategy) {
      this._strategy = strategy;
   }

   public int ExecuteStrategy(int a, int b) {
      return this._strategy.Execute(a, b);
   }
}

class Client {

   static void Main(string[] args) {

      Context context;

      // Three contexts following different strategies
      context = new Context(new AddStrategy());
      var resultA = context.ExecuteStrategy(3, 4);
      Console.WriteLine(resultA);

      context = new Context(new SubstractStrategy());
      var resultB = context.ExecuteStrategy(3, 4);
      Console.WriteLine(resultB);

      context = new Context(new MultiplyStrategy());
      var resultC = context.ExecuteStrategy(3, 4);
      Console.WriteLine(resultC);

      Console.ReadKey();
   }

}

策略模式与桥模式有着相同的类图, 但是两种模式的意图是不相同的, 桥模式表示的是结构, 而策略模式表示的是行为。

策略模式中的 Context 与 Strategy 的耦合性比桥模式中的 Abstraction 与 Implementation 更紧密。

本文参与 腾讯云自媒体分享计划,分享自作者个人站点/博客。
如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

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

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

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
目录
  • 设计模式之策略模式
    • 结构
      • 说明
        • 适用条件
          • 实现
          领券
          问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档