Spring Boot 项目怎么使用策略模式?

码农老张 后端 2024-08-05

Spring Boot 项目怎么使用策略模式?

什么是策略模式?

策略模式是一种设计模式,允许在运行时选择算法或行为的模式。其核心思想是定义一系列算法,把它们一个个封装起来,并使它们可以互相替换。这种模式能够根据不同的情况动态地选择最合适的算法。

通俗来说,在开发的过程中,需要针对不同的情况做执行不同的处理方法,单纯地写 if...else... 会导致扩展性和可维护性变差。

Spring Boot 项目怎么使用策略模式?

Spring 风格的策略模式

策略模式包含了 3 个部分,分别是:

  1. 上下文(Context)类:具体策略类的对象,本文主要介绍上下文类通过依赖注入的方式获取具体策略对象。
  2. 抽象策略(Abstract Strategy)类:定义了策略对象的公共接口或抽象类,具体策略类必须实现的方法。
  3. 具体策略(Concrete Strategy)类:实现了抽象策略定义的接口或抽象类,包含了具体的算法实现。

为了方便对比,本文直接改写菜鸟教程的举例。

抽象策略类可以是接口也可以是抽象类,这里推荐使用抽象类。 因为抽象类方法里可以写一些公有逻辑,避免重复代码。

步骤1

创建一个抽象类。java

代码解读
复制代码
public abstract class Strategy { public int doOperation(int num1, int num2) { System.out.println("公有逻辑..."); return 0; } }

步骤2

创建基础抽象类的具体策略类。java

代码解读
复制代码
import org.springframework.stereotype.Service; @Service("add") public class OperationAdd extends Strategy{ public int doOperation(int num1, int num2) { super.doOperation(num1, num2); System.out.println("执行加法计算"); return num1 + num2; } }java
代码解读
复制代码
import org.springframework.stereotype.Service; @Service("subtract") public class OperationSubtract extends Strategy{ public int doOperation(int num1, int num2) { super.doOperation(num1, num2); System.out.println("执行减法计算"); return num1 - num2; } }java
代码解读
复制代码
import org.springframework.stereotype.Service; @Service("multiply") public class OperationMultiply extends Strategy { public int doOperation(int num1, int num2) { super.doOperation(num1, num2); System.out.println("执行乘法计算"); return num1 * num2; } }

步骤3(重点)

在上下文(Context)类中注入策略类并调用。上下文类就是执行算法的类,在项目中一般会是一个 Service 类。java

代码解读
复制代码
@Service public class ContextServiceImpl implements ContextService { // 注入策略对象,key是注册时的名称,value是策略对象 @Resource private Map<String, Strategy> strategyMap; @Override public int executeStrategy(int num1, int num2) { // 执行加法策略对象 Strategy addStrategy = strategyMap.get("add"); int add = addStrategy.doOperation(num1, num2); System.out.println("add:"+add); // 执行减法策略对象 Strategy subtractStrategy = strategyMap.get("subtract"); int subtract = subtractStrategy.doOperation(num1, num2); System.out.println("subtract:"+subtract); // 执行乘法策略对象 Strategy multiplyStrategy = strategyMap.get("multiply"); int multiply = multiplyStrategy.doOperation(num1, num2); System.out.println("multiply:"+multiply); return 0; } }

步骤4

测试一下。java

代码解读
复制代码
@SpringBootTest public class StrategyTest { @Resource private ContextService contextService; @Test public void test(){ contextService.executeStrategy(10, 5); } }

运行结果:makefile

代码解读
复制代码
公有逻辑... 执行加法计算 add:15 公有逻辑... 执行减法计算 subtract:5 公有逻辑... 执行乘法计算 multiply:50

提示

在使用策略模式时,也需要注意不要过度使用,特别是在只有少数策略时(少于3个),或者策略很不可能变化时。因为引入策略模式会增加一些对象的创建和交互,可能会引入额外的复杂性。正确的应用策略模式可以使系统设计更加灵活,易于维护和扩展。

转载来源:https://juejin.cn/post/7372100124635791370

Apipost 私有化火热进行中

评论