策略模式编程

接口定义:

public interface ProcessParserStrategy {

List<ProcessInfo> parser(String osType, String processInfo);

String getApp();

}

public interface ConfigParserStrategy {

List<ConfigInfo> parser(String configInfo);

String getConfigType();

}

接口实现:

@Service

public class xxxProcessParser implements ProcessParserStrategy {

@Override

public List<ProcessInfo> parser(String osType, String processInfo) {

return null;

}

@Override

public String getApp() {

return "xxx";

}

}

@Service

public class xxxDispatcherConfigParser implements ConfigParserStrategy {

@Override

public List<ConfigInfo> parser(String configInfo) {

return null;

}

@Override

public String getConfigType() {

return "xxx_dispatcher";

}

}

service定义:

@Service

public class ProcessParserService {

private Map<String, ProcessParserStrategy> processParserStrategyMap;

@Autowired

public ProcessParserService(List<ProcessParserStrategy> processParserStrategyList) {

processParserStrategyMap = processParserStrategyList.stream()

.collect(Collectors.toMap(ProcessParserStrategy::getApp, Function.identity()));

}

public List<ProcessInfo> parseProcess(String app, String osType, String processInfo) {

final ProcessParserStrategy processParserStrategy = processParserStrategyMap.get(app);

final List<ProcessInfo> processInfos = processParserStrategy.parser(osType, processInfo);

return processInfos;

}

}

@Service

public class ConfigParserService {

private Map<String, ConfigParserStrategy> configParserStrategyMap;

@Autowired

public ConfigParserService(List<ConfigParserStrategy> configParserStrategieList) {

configParserStrategyMap = configParserStrategieList.stream()

.collect(Collectors.toMap(ConfigParserStrategy::getConfigType, Function.identity()));

}

public List<ConfigInfo> parseProcess(String app, String configFileType, String configInfo) {

String configType = app + "_" + configFileType;

final ConfigParserStrategy configParserStrategy = configParserStrategyMap.get(configType.toLowerCase());

final List<ConfigInfo> configInfos = configParserStrategy.parser(configInfo);

return configInfos;

}

}

client 调用:

@RestController public class PaymentController { @Autowired private xxxService xxxService; @GetMapping("/xxx") public void xxx(@RequestParam String type, @RequestParam int amount) { xxxService.xxx(type, amount); } }

相关推荐
流星先生!1 天前
策略模式实现
策略模式
小小寂寞的城2 天前
JAVA策略模式demo【设计模式系列】
java·设计模式·策略模式
来自宇宙的曹先生2 天前
使用策略模式 + 自动注册机制来构建旅游点评系统的搜索模块
旅游·策略模式
花好月圆春祺夏安4 天前
基于odoo17的设计模式详解---策略模式
设计模式·策略模式
佛祖让我来巡山5 天前
【工厂和策略设计模式妙用】解决接口选择与多重if-else 问题
设计模式·策略模式·工厂模式
刘某某.6 天前
使用工厂模式和策略模式实现布隆过滤器
策略模式
牛奶咖啡139 天前
学习设计模式《十六》——策略模式
学习·设计模式·策略模式·认识策略模式·策略模式的优缺点·何时选用策略模式·策略模式的使用示例
勤奋的知更鸟9 天前
Java 编程之策略模式详解
java·设计模式·策略模式
FreeBuf_9 天前
朝鲜APT组织使用Nim语言恶意软件对macOS发起隐秘Web3与加密货币攻击
macos·web3·策略模式
暮乘白帝过重山9 天前
设计模式篇:灵活多变的策略模式
设计模式·策略模式