学习篇:设计模式-策略模式

       在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。简而言之,就是定义一系列的算法,把它们一个个封装起来, 并且使它们可相互替换。
       使用场景:一个系统中有若干个类,我们可以把它看成不同行为或者策略,在不同的业务场景中,这些行为可以任意地组合,删减和替换来完成一项功能。在实际场景中,系统在执行某个流程时,如果在主流程前后有一些附加动作,比如参数校验,数据拼装,记录写入可以使用策略模式,避免了过多的if else,增强代码可读性。
下面用策略模式实现一个简单的Demo:

一:创建接口
   interface IBeforeAction
   {
       void Action();
   }
二:创建实体类(策略),实现接口
    //策略一:
   class BeforeActionOne : IBeforeAction
   {
       public void Action()
       {
           Console.WriteLine("This is BeforeActionOne.");
       }
   }
   //策略二:
   class BeforeActionTwo : IBeforeAction
   {
       public void Action()
       {
           Console.WriteLine("This is BeforeActionTwo.");
       }
   }
三:创建ActionManager管理类
public class ActionManager
  {
      public static ActionManager Instance { get; } = new ActionManager();
      private ActionManager()
      {
          //初始化执行策略集合
          IBeforeActions = new List<IBeforeAction>()
          {
              new BeforeActionOne(),
              new BeforeActionTwo()
          };
          IAfterActions = new List<IAfterAction>()
          {
              new AfterActionOne(),
              new AfterActionTwo()
          };
      }
      List<IBeforeAction> IBeforeActions { get; set; }
      List<IAfterAction> IAfterActions { get; set; }
      public void Run()
      {
          //执行策略
          foreach (var beforeAction in IBeforeActions)
          {
              beforeAction.Action();
          }
          
          //执行主方法 
          Console.WriteLine("Main method is running...");

          foreach (var afterAction in IAfterActions)
          {
              afterAction.Action();
          }
      }
  }
四:主方法执行
  class StrategyPattern
    {
        static void Main(string[] args)
        {
            ActionManager.Instance.Run();
            Console.Read();
        }
    }
五:执行程序,输出结果:
This is BeforeActionOne.
This is BeforeActionTwo.
Main method is running...
This is AfterActionOne.
This is AfterActionTwo.
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值