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

Posted boonya

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Java使用函数式接口处理if-else的策略模式相关的知识,希望对你有一定的参考价值。

目录

常规策略模式示例

函数式接口策略

定义函数方法

函数策略调用


常规策略模式示例

public abstract class Strategy 

    abstract void doSomething();


// 策略A
public class AStrategy extends Strategy

    @Override
    void doSomething() 

    


// 策略B

public class BStrategy extends Strategy

    @Override
    void doSomething() 

    

函数式接口策略

定义函数方法

@Slf4j
public class Functions 

    public String strategyA(String resourceId)
        log.info(resourceId);
        return "A";
    

    public String strategyB(String resourceId)
        log.info(resourceId);
        return "B";
    

    public String strategyC(String resourceId)
        log.info(resourceId);
        return "C";
    

函数策略调用

@Slf4j
public class FunctionStrategy 

    private Functions functions = new Functions();

    /**
     * 函数式表
     */
    private Map<String, Function<String,String>> strategyMap = new HashMap<>();

    /**
     * 初始化函数匹配策略
     */
    public void init()
        strategyMap.put("A",resourceId->functions.strategyA(resourceId));
        strategyMap.put("B",resourceId->functions.strategyB(resourceId));
        strategyMap.put("C",resourceId->functions.strategyC(resourceId));
    

    /**
     * 获取结果
     * @param resourceId
     * @return
     */
    public String getResult(String resourceId)
        Function<String,String> result = strategyMap.get(resourceId);
        if(null != result)
            return result.apply(resourceId);
        else
            new RuntimeException("错误调用");
        
        return null;
    

    public static void main(String[] args) 
        FunctionStrategy functionStrategy = new FunctionStrategy();
        functionStrategy.init();
        log.debug("->",functionStrategy.getResult("A"));
    

以上是关于Java使用函数式接口处理if-else的策略模式的主要内容,如果未能解决你的问题,请参考以下文章

还在用策略模式解决 if-else?Map + 函数式接口就行了。。。

还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

#yyds干货盘点#还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

#yyds干货盘点#还在用策略模式解决 if-else?Map+函数式接口方法才是YYDS!

用Map+函数式接口来实现策略模式