关键词搜索

源码搜索 ×
×

Java使用函数式接口处理if-else的策略模式

发布2022-01-27浏览1215次

详情内容

目录

常规策略模式示例

函数式接口策略

定义函数方法

函数策略调用


常规策略模式示例

  1. public abstract class Strategy {
  2. abstract void doSomething();
  3. }
  4. // 策略A
  5. public class AStrategy extends Strategy{
  6. @Override
  7. void doSomething() {
  8. }
  9. }
  10. // 策略B
  11. public class BStrategy extends Strategy{
  12. @Override
  13. void doSomething() {
  14. }
  15. }

函数式接口策略

定义函数方法

  1. @Slf4j
  2. public class Functions {
  3. public String strategyA(String resourceId){
  4. log.info(resourceId);
  5. return "A";
  6. }
  7. public String strategyB(String resourceId){
  8. log.info(resourceId);
  9. return "B";
  10. }
  11. public String strategyC(String resourceId){
  12. log.info(resourceId);
  13. return "C";
  14. }
  15. }

函数策略调用

  1. @Slf4j
  2. public class FunctionStrategy {
  3. private Functions functions = new Functions();
  4. /**
  5. * 函数式表
  6. */
  7. private Map<String, Function<String,String>> strategyMap = new HashMap<>();
  8. /**
  9. * 初始化函数匹配策略
  10. */
  11. public void init(){
  12. strategyMap.put("A",resourceId->functions.strategyA(resourceId));
  13. strategyMap.put("B",resourceId->functions.strategyB(resourceId));
  14. strategyMap.put("C",resourceId->functions.strategyC(resourceId));
  15. }
  16. /**
  17. * 获取结果
  18. * @param resourceId
  19. * @return
  20. */
  21. public String getResult(String resourceId){
  22. Function<String,String> result = strategyMap.get(resourceId);
  23. if(null != result){
  24. return result.apply(resourceId);
  25. }else{
  26. new RuntimeException("错误调用");
  27. }
  28. return null;
  29. }
  30. public static void main(String[] args) {
  31. FunctionStrategy functionStrategy = new FunctionStrategy();
  32. functionStrategy.init();
  33. log.debug("->{}",functionStrategy.getResult("A"));
  34. }
  35. }

相关技术文章

点击QQ咨询
开通会员
返回顶部
×
微信扫码支付
微信扫码支付
确定支付下载
请使用微信描二维码支付
×

提示信息

×

选择支付方式

  • 微信支付
  • 支付宝付款
确定支付下载