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

打印 上一主题 下一主题

主题 877|帖子 877|积分 2631

1、策略模式公共接口类 

  1. BankFileStrategy
复制代码
  1. public interface BankFileStrategy {
  2.    
  3.     String getBankFile(String bankType) throws Exception;
  4. }
复制代码
2、策略模式业务实现类

  1. @Slf4j
  2. @Component
  3. public class ConcreteStrategy implements BankFileStrategy {
  4.    
  5.     @Override
  6.     public String getBankFile(String bankType) throws Exception {
  7.     ....业务代码
  8.     }
复制代码
3、策略模式实现类摆列

  1. public enum BankTypeClassEnum {
  2.     //
  3.     strategyA("ICBC", "concreteStrategy"),
  4.     ;
  5.     private String name;
  6.     private String implName;
  7.     public static String getImplName(String name) {
  8.         if (StringUtils.isBlank(name)) {
  9.             return null;
  10.         }
  11.         for (BankTypeClassEnum aEnum : BankTypeClassEnum.values()) {
  12.             if (aEnum.getName().equals(name)) {
  13.                 return aEnum.getImplName();
  14.             }
  15.         }
  16.         return null;
  17.     }
  18.     BankTypeClassEnum(String name, String implName) {
  19.         this.name = name;
  20.         this.implName = implName;
  21.     }
  22.     public String getName() {
  23.         return name;
  24.     }
  25.     public void setName(String name) {
  26.         this.name = name;
  27.     }
  28.     public String getImplName() {
  29.         return implName;
  30.     }
  31.     public void setImplName(String implName) {
  32.         this.implName = implName;
  33.     }
  34. }
复制代码
4、策略模式实行类

  1. @Slf4j
  2. @Component
  3. public class BankFileContext {
  4.     //当一个接口有多个实现类时,Spring会自动将Strategy接口的实现类注入到这个Map中,key为bean id,value值则为对应的策略实现类
  5.     @Autowired
  6.     private Map<String, BankFileStrategy> bankFileStrategyMap;
  7.     /**
  8.      * 执行类
  9.      */
  10.     public String execute(String bankType) throws Exception {
  11.         BankFileStrategy service = bankFileStrategyMap.get(BankTypeClassEnum.getImplName(bankType));
  12.         return service.getBankFile(bankType);
  13.     }
  14. }
复制代码
5、测试策略模式

  1. @Slf4j
  2. @RestController
  3. @RequiredArgsConstructor(onConstructor = @__(@Autowired))
  4. public class TestBankFileController {
  5.     private final BankFileContext bankFileContext;
  6.          
  7.     @GetMapping(value = "/bank/{bankType}/file")
  8.     public String testBankFile(@PathVariable String bankType) {
  9.         try {
  10.             
  11.             return bankFileContext.execute(bankType);
  12.         } catch (Exception e) {
  13.             log.error("testBankFile is error", e);
  14.             return "error";
  15.         }
  16.     }
  17. }
复制代码


免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

种地

金牌会员
这个人很懒什么都没写!

标签云

快速回复 返回顶部 返回列表