1、策略模式公共接口類?
BankFileStrategy
public interface BankFileStrategy {String getBankFile(String bankType) throws Exception;
}
2、策略模式業務實現類
@Slf4j
@Component
public class ConcreteStrategy implements BankFileStrategy {@Overridepublic String getBankFile(String bankType) throws Exception {....業務代碼}
3、策略模式實現類枚舉
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、策略模式執行類
@Slf4j
@Component
public class BankFileContext {//當一個接口有多個實現類時,Spring會自動將Strategy接口的實現類注入到這個Map中,key為bean id,value值則為對應的策略實現類@Autowiredprivate Map<String, BankFileStrategy> bankFileStrategyMap;/*** 執行類*/public String execute(String bankType) throws Exception {BankFileStrategy service = bankFileStrategyMap.get(BankTypeClassEnum.getImplName(bankType));return service.getBankFile(bankType);}
}
5、測試策略模式
@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";}}
}