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

什么是策略模式?

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

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

详情看菜鸟教程:www.runoob.com/design-patt…

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个),或者策略很不可能变化时。因为引入策略模式会增加一些对象的创建和交互,可能会引入额外的复杂性。正确的应用策略模式可以使系统设计更加灵活,易于维护和扩展。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值