如何使用策略模式并让spring管理

1、策略模式公共接口类
复制代码
BankFileStrategy
java 复制代码
public interface BankFileStrategy {


    
    String getBankFile(String bankType) throws Exception;
}
2、策略模式业务实现类
java 复制代码
@Slf4j
@Component
public class ConcreteStrategy implements BankFileStrategy {

   
    @Override
    public String getBankFile(String bankType) throws Exception {
    ....业务代码
    }
3、策略模式实现类枚举
java 复制代码
public enum BankTypeClassEnum {
    //
    strategyA("ICBC", "concreteStrategy"),
    ;
    private String name;
    private String implName;

    public static String getImplName(String name) {
        if (StringUtils.isBlank(name)) {
            return null;
        }

        for (BankTypeClassEnum aEnum : BankTypeClassEnum.values()) {
            if (aEnum.getName().equals(name)) {
                return aEnum.getImplName();
            }
        }
        return null;
    }

    BankTypeClassEnum(String name, String implName) {
        this.name = name;
        this.implName = implName;
    }

    public String getName() {
        return name;
    }

    public void setName(String name) {
        this.name = name;
    }

    public String getImplName() {
        return implName;
    }

    public void setImplName(String implName) {
        this.implName = implName;
    }
}
4、策略模式执行类
java 复制代码
@Slf4j
@Component
public class BankFileContext {
    //当一个接口有多个实现类时,Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类
    @Autowired
    private Map<String, BankFileStrategy> bankFileStrategyMap;

    /**
     * 执行类
     */
    public String execute(String bankType) throws Exception {
        BankFileStrategy service = bankFileStrategyMap.get(BankTypeClassEnum.getImplName(bankType));
        return service.getBankFile(bankType);
    }
}
5、测试策略模式
java 复制代码
@Slf4j
@RestController
@RequiredArgsConstructor(onConstructor = @__(@Autowired))
public class TestBankFileController {

    private final BankFileContext bankFileContext;


	 
    @GetMapping(value = "/bank/{bankType}/file")
    public String testBankFile(@PathVariable String bankType) {
        try {
            
            return bankFileContext.execute(bankType);
        } catch (Exception e) {
            log.error("testBankFile is error", e);
            return "error";
        }

    }
}
相关推荐
西西学代码19 分钟前
Flutter---个人信息(5)---持久化存储
java·javascript·flutter
芝麻开门-新起点22 分钟前
flutter 生命周期管理:从 Widget 到 State 的完整解析
开发语言·javascript·ecmascript
陈果然DeepVersion24 分钟前
Java大厂面试真题:Spring Boot+Kafka+AI智能客服场景全流程解析(五)
java·spring boot·kafka·向量数据库·大厂面试·rag·ai智能客服
FAFU_kyp31 分钟前
Spring Boot 邮件发送系统 - 从零到精通教程
java·网络·spring boot
脚踏实地的大梦想家1 小时前
【Docker】P2 Docker 命令:从Nginx部署到镜像分享的全流程指南
java·nginx·docker
ConardLi1 小时前
Easy Dataset 已经突破 11.5K Star,这次又带来多项功能更新!
前端·javascript·后端
Blossom.1181 小时前
把AI“编”进草垫:1KB决策树让宠物垫自己报「如厕记录」
java·人工智能·python·算法·决策树·机器学习·宠物
芒克芒克1 小时前
ssm框架之Spring(上)
java·后端·spring
消失的旧时光-19431 小时前
Android ble理解
java·kotlin
晨晖21 小时前
SpringBoot的yaml配置文件,热部署
java·spring boot·spring