说明
本文介绍Java中策略模式的一种写法:注入抽象类。本方法是SpringBoot项目中写策略模式最好的写法!
注入抽象类的具体方法是:抽象类+不同的实现类(作为Bean注册到Spring),通过注入抽象类来获取所有的实现类,然后自动找到枚举类对应的那个实现类然后去执行。
此写法的优缺点
优点
- 实现类是通过Spring注入的,新增实现类时无需手动添加到策略集合。
- 类型是通过枚举指定的,便于维护。
- 实现类显式地持有类型,可以方便的获取本类型的信息(比如:描述)。
缺点
无
实战
项目需求
有不同的支付方式:支付宝、微信、银行卡,前端传了一个payType,根据payType去判断调用哪种支付方式。
思路
- 提供一个支付功能抽象类,不同的支付方式去继承这个抽象类。
- 抽象类持有具体的类型,在实现类实例化时给它赋值。
- 通过注入这个抽象类来获取实现类的集合,通过支付的类型来获取具体实现类,去调用支付的方法。
代码结构

代码
此内容仅限VIP查看,请先登录
测试
代码
package com.knife.designPattern.controller;
import com.knife.designPattern.constant.PayType;
import com.knife.designPattern.strategy.PayStrategyHolder;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.web.bind.annotation.GetMapping;
import org.springframework.web.bind.annotation.RestController;
@RestController
public class PayController {
@Autowired
private PayStrategyHolder payStrategyHolder;
@GetMapping("/pay")
public String pay(PayType payType) {
payStrategyHolder.pay(payType);
return "test success";
}
}
测试
访问:http://localhost:8080/pay?payType=WECHAT_PAY

后端结果
调用远程接口:微信支付

请先 !