策略模式编程

接口定义:

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); } }

相关推荐
博一波4 天前
【设计模式-行为型】策略模式
设计模式·策略模式
想要打 Acm 的小周同学呀4 天前
JDBCTemplate-模板设计模式和策略模式
设计模式·策略模式
黑客老陈7 天前
Electron的应用安全测试基础 | 安装与检测基于Electron的应用程序
开发语言·javascript·网络·安全·web安全·electron·策略模式
我是苏苏9 天前
设计模式03:行为型设计模式之策略模式的使用情景及其基础Demo
设计模式·策略模式
power-辰南9 天前
设计模式之策略模式
设计模式·策略模式
hlvy9 天前
如何使用策略模式并让spring管理
java·开发语言·后端·spring·策略模式
難釋懷9 天前
策略模式详解与应用
设计模式·策略模式
一只小灿灿10 天前
探索 C++ 与 LibUSB:开启 USB 设备交互的奇幻之旅
c++·交互·策略模式
zhulangfly10 天前
【Java设计模式-4】策略模式,消灭if/else迷宫的利器
java·设计模式·策略模式
多多*11 天前
深入架构剖析 博客点赞逻辑 strategy 策略模式 策略接口 上下文 具体策略 项目实战
开发语言·学习·架构·bash·intellij-idea·策略模式