找回密码
 立即注册
首页 业界区 业界 C#设计模式之策略模式

C#设计模式之策略模式

唐嘉懿 昨天 08:26
策略模式简介

策略模式在设计模式中属于对象行为型模式,它的意图是定义一系列的算法,把它们一个个封装起来,并且使它们可相互替换。策略模式使得算法可独立于使用它的客户而变化。
策略模式的图解如下所示:
1.png

示例

本文通过一个简单的例子来向大家介绍C#如何使用策略模式。本文以出行这个行为举例,出行我们可以使用多种方式,比如自己开车、乘坐公交、骑自行车等。
1、定义策略接口
  1. public interface ITravelStrategy
  2. {
  3.      public void Print();
  4. }
复制代码
我们定义了一个出行策略接口,只定义了一个Print方法。
2、实现具体策略类
  1. public class Car : ITravelStrategy
  2. {
  3.      public void Print()
  4.      {
  5.          Console.WriteLine("乘坐汽车出行\r\n");
  6.      }
  7. }
  8. public class Bike : ITravelStrategy
  9. {
  10.      public void Print()
  11.      {
  12.          Console.WriteLine("骑自行车出行\r\n");
  13.      }
  14. }
  15. public class Bus : ITravelStrategy
  16. {
  17.      public void Print()
  18.      {
  19.          Console.WriteLine("乘坐公交出行\r\n");
  20.      }
  21. }
复制代码
定义了三个具体策略类分别为Car、Bike与Bus,都实现了ITravelStrategy接口,它们的实现是不同的。
3、实现上下文类
  1. public class TravelContext
  2. {
  3.      private ITravelStrategy _strategy;
  4.      public TravelContext(ITravelStrategy strategy)
  5.      {
  6.          _strategy = strategy;
  7.      }
  8.      public void SetStrategy(ITravelStrategy strategy)
  9.      {
  10.          _strategy = strategy;
  11.      }
  12.      public void ExecuteStrategy()
  13.      {
  14.          _strategy.Print();
  15.      }
  16. }
复制代码
该上下文类维护一个对ITravelStrategy对象的引用,可以在构造函数中为其指定一个具体的策略类,它还提供了SetStrategy方法来改变策略,ExecuteStrategy方法来执行策略。
4、使用策略模式
  1. static void Main()
  2. {
  3.     // 创建上下文并设置初始策略
  4.     TravelContext travelContext = new TravelContext(new Car());
  5.     travelContext.ExecuteStrategy();
  6.     // 切换策略为坐公交出行
  7.     travelContext.SetStrategy(new Bus());
  8.     travelContext.ExecuteStrategy();
  9.     // 切换策略为骑自行车出行
  10.     travelContext.SetStrategy(new Bike());
  11.     travelContext.ExecuteStrategy();
  12.   
  13.     Console.ReadLine();
  14. }
复制代码
运行结果:
2.png

该示例的图解如下所示:
3.png

总结

使用策略模式的步骤总结如下:
4.png

希望对你有所帮助。
Ref

1、《Head First 设计模式(中文版)》
2、《大话设计模式》
3、《设计模式:可复用面向对象软件的基础》
4、YouTube Strategy Pattern - Design Patterns in C#

来源:程序园用户自行投稿发布,如果侵权,请联系站长删除
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!
您需要登录后才可以回帖 登录 | 立即注册