设计模式之策略模式

简介

策略设计模式是一种行为型设计模式,它使得在运行时可以根据需要选择不同的算法或策略来完成特定的任务。

如何使用策略模式

在使用策略设计模式时,首先需要定义一个公共接口抽象类,它描述了要实现的算法或策略的方法。然后,您可以编写多个具体的实现类,每个类实现接口或抽象类中定义的方法,并提供不同的算法或策略。

接下来,您需要编写一个客户端类,它将接受某些输入并使用所需的算法或策略来处理这些输入。该客户端类需要在运行时选择所需的算法或策略,并将其传递给处理输入的对象。

代码举例

实现类图

MathOperation
+operate(num1:int, num2:int)
AddOperation
+operate(num1:int, num2:int)
SubtractOperation
+operate(num1:int, num2:int)
Main
+main(args:String[])

代码展示

MathOperation

/**.
 * 设置一个我们需要执行的操作的抽象类
 */
public abstract class MathOperation {

  /**.
   * 描述执行操作的方法信息
   * @param num1 第一个操作数
   * @param num2 第二个操作数
   * @return 计算结果
   */
  public abstract int operate(int num1, int num2);
}

AddOperation

/**.
 * 此处我们实现加法操作
 */
public class AddOperation extends MathOperation{


  /**
   * . 描述执行操作的方法信息
   *
   * @param num1 第一个操作数
   * @param num2 第二个操作数
   * @return 计算结果
   */
  @Override
  public int operate(int num1, int num2) {
    return num1+num2;
  }
}

SubtractOperation

/**.
 * 此处我们实现剑法操作
 */
public class SubtractOperation extends MathOperation{


  /**
   * . 描述执行操作的方法信息
   *
   * @param num1 第一个操作数
   * @param num2 第二个操作数
   * @return 计算结果
   */
  @Override
  public int operate(int num1, int num2) {
    return num1-num2;
  }
}

测试代码

public class Main {

  public static void main(String[] args) {
    MathOperation  mathOperation = new AddOperation();
    System.out.println(mathOperation.operate(1, 2));

    mathOperation = new SubtractOperation();
    System.out.println(mathOperation.operate(1, 2));
  }
}

经过测试我们发现我们的策略模式对于同样的事数据使用不同的算法或者策略进行了很好的替换操作。

模式详解

使用到的角色

策略模式中我们实现使用到或者说我们使用使用策略模式必须使用到以下角色:

  1. Strategy
    策略,策略角色负责决定实现策略所必须的接口。由我们的MathOperation扮演;
  2. ConcreteStrategy
    具体的策略负责实现策略角色的接口,即负责实现具体的策略(比如方法,方向,算法)。在我们的程序中由AddOperationAddOperation扮演。
  3. context
    上下文负责使用策略角色,上下文保存具体策略角色的实例,并使用具体角色来实现需求。在我们的程序中由Main担任。

模式类图

Strategy
+StrategyMethod()
ConreteStrategy1
+StrategyMethod()
ConreteStrategy2
+StrategyMethod()
Context
strategy
+contextMethod()

使用策略模式的好处

当您面对一个问题,需要根据特定条件或环境选择不同的算法或策略来解决时,就可以考虑使用策略设计模式。例如,您可能需要在不同的场景下执行不同的排序算法,或者在不同的环境下执行不同的文件读取算法。使用策略设计模式可以使您的代码更加灵活、可扩展和易于维护。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值