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

函数式接口可以帮助解决if-else的问题。在Java中,函数式接口是指只包含一个抽象方法的接口。通过使用lambda表达式或方法引用,可以将代码逻辑作为参数传递给函数式接口的方法,从而避免使用if-else语句。 以下是一个简单的示例,演示如何使用函数式接口处理if-else逻辑: ```java @FunctionalInterface interface Action { void perform(String input); } class Processor { public static void process(String input, Action action) { action.perform(input); } } public class Main { public static void main(String[] args) { String input = "example"; Processor.process(input, (str) -> { if (str.equals("example")) { System.out.println("Do something for example"); } else if (str.equals("another example")) { System.out.println("Do something for another example"); } else { System.out.println("Do something else"); } }); } } ``` 在上面的示例中,我们定义了一个函数式接口`Action`,它有一个抽象方法`perform`,该方法接受一个String类型的参数。`Processor`类中的`process`方法接受一个`Action`对象作为参数,并调用其`perform`方法。 在`main`方法中,我们使用lambda表达式作为参数传递给`process`方法。根据输入的不同,我们可以定义不同的代码逻辑来执行相应的操作。这样,我们就可以避免使用冗长的if-else语句。 通过使用函数式接口,我们可以将代码逻辑作为参数传递,实现更灵活和可扩展的解决方案。同时,它还提高了代码的可读性和可维护性。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值