设计模式之策略模式

一、概念

  • 官方的的定义就是一个类的行为或其算法可以在运行时更改。

二、场景

  • 许多相关的类仅仅是行为有异;
  • 需要使用一个算法的不同变体;
  • 算法使用客户不应该知道的数据;
  • 一个类定义了多种行为,并且这些行为在类的操作中以多个条件语句的形式出现。

三、实现

  • 条件
    • C#
  • 场景
    以老人、家长、孩子为例用不同的算法计算结果为例实现策略模式。
  • 代码实现
    • 新建加法类,类名:Add
          using System;
          using System.Collections.Generic;
          using System.Text;
          
          namespace StrategyPattern
          {
              public class Add : ICalculate
              {
                  public double Sum(int num, int num1)
                  {
                      Console.WriteLine($"Add:结果{num+num1}");
                      return num + num1;
                  }
              }
          } 
      
    • 新建乘法类,类名:Multiplication
          using System;
          using System.Collections.Generic;
          using System.Runtime.CompilerServices;
          using System.Text;
          
          namespace StrategyPattern
          {
              public class Multiplication : ICalculate
              {
                  public double Sum(int num, int num1)
                  {
                      
                      Console.WriteLine($"Multiplication结果为:{num* num1}");
                      return num * num1;
                  }
              }
          }    
      
    • 新建除法类,类名:Division
          using System;
          using System.Collections.Generic;
          using System.Text;
          
          namespace StrategyPattern
          {
              public class Division : ICalculate
              {
                  public double Sum(int num, int num1)
                  { 
                      Console.WriteLine($"division结果为:{num / num1}");
                      double aa = (num * 0.1) / (num1 * 0.1);
                      return (num * 0.1) / (num1 * 0.1);
                  }
              }
          }    
      
    • 新建减法类,类名:Subtraction
          using System;
          using System.Collections.Generic;
          using System.Text;
          
          namespace StrategyPattern
          {
              public class Subtraction : ICalculate
              {
                  public double Sum(int num, int num1)
                  { 
                      Console.WriteLine($"Subtraction结果:{num- num1}");
                      return num - num1;
                  }
              }
          } 
      
    • 新建接口类,类名:ICalculate
          using System;
          using System.Collections.Generic;
          using System.Text;
          
          namespace StrategyPattern
          {
              public  interface ICalculate
              {
                  /// <summary>
                  /// 算数
                  /// </summary>
                  /// <param name="num"></param>
                  /// <param name="num1"></param>
                  double Sum(int num,int num1);
              }
          }    
      
    • 启动类,类名:Program
           using System;
          
          namespace StrategyPattern
          {
              internal class Program
              {
                  /// <summary>
                  /// 策略模式
                  /// </summary>
                  /// <param name="args"></param>
                  static void Main(string[] args)
                  {
                      ICalculate calculate = new Add();
                      double result = calculate.Sum(1, 2);
                      Console.WriteLine($"Add:{result}");
          
                      ICalculate calculate1 = new Division();
                      double result1 = calculate1.Sum(1, 2);
                      Console.WriteLine($"Division:{result1}");
          
                      ICalculate calculate2 = new Multiplication();
                      double result2 = calculate2.Sum(1, 2);
                      Console.WriteLine($"Multiplication:{result2}");
          
                      ICalculate calculate3 = new Subtraction();
                      double result3 = calculate3.Sum(1, 2);
                      Console.WriteLine($"Subtraction:{result3}");
                  }
              }
          } 
      

四、优缺点

  • 优点
    • 易维护,避免重复的If…else。
  • 缺点
    • 增加很多的策略类。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值