策略模式编程

接口定义:

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

相关推荐
liulilittle5 天前
macOS 内核路由表操作:直接 API 编程指南
网络·c++·macos·策略模式·路由·route·通信
青草地溪水旁5 天前
设计模式(C++)详解——策略模式(1)
c++·设计模式·策略模式
o0向阳而生0o5 天前
105、23种设计模式之策略模式(14/23)
设计模式·策略模式
青草地溪水旁6 天前
设计模式(C++)详解——策略模式(2)
c++·设计模式·策略模式
一勺菠萝丶7 天前
macOS 终端配置全攻略:zsh、bash_profile、zprofile、zshrc 到 nvm 配置的完整科普
macos·bash·策略模式
Miqiuha7 天前
设计模式之策略模式学习
学习·设计模式·策略模式
醉、倾城9 天前
面向开发人员的macOS入门教程
macos·策略模式
zero13_小葵司10 天前
在不同开发语言与场景下设计模式的使用
java·开发语言·javascript·设计模式·策略模式
charlie11451419110 天前
精读C++20设计模式——行为型设计模式:策略模式
c++·学习·设计模式·策略模式·c++20
2023框框10 天前
方法器 --- 策略模式(Strategy Pattern)
java·策略模式