前言
在工作开发中,会遇到很多如业务类型、状态、渠道等会很多if-else的情况。可能一个类里面写了很多if-else,代码阅读可能增加很多难度,同样也不雅观。
方法
我们可以采用多种方法比如switch方法、函数式接口、策略模式来优化if-else方法,今天主要分享函数式接口的方式。
函数式接口
当我们遇到复杂的处理逻辑,可以将这些逻辑抽出来处理,增加整体的可读性和解耦性,利用函数式接口来处理if-else的模式,也可以用策略模式,他们两个的实现逻辑差不多,策略模式自行百度这里就不做分享了。
函数式接口选择
函数式接口 | 方法说明 | 调用方法 |
---|---|---|
Function | 有参数,有返回值 | apply |
Consumer | 有参数,无返回值 | accept |
Supplier | 无参数,有返回值 | get |
Runnable | 无参数,无返回值 | run |
@PostConstruct注解
Java自带的注解,在方法上加该注解会在项目启动的时候执行该方法,也可以理解为在spring容器初始化的时候执行该方法。
示例
@Component
public class TestFunctionInterfaceStrategy {
/**
* Map-key:方法标识
*
* Function-T 方法参数
*
* Function-R 方法返回值
*
*/
private Map<String, Function<String,String>> methodMap;
@PostConstruct
private void init(){
methodMap = new HashMap<>(4);
methodMap.put("1",this::businessMethod1);
methodMap.put("2",this::businessMethod2);
methodMap.put("3",this::businessMethod3);
methodMap.put("4",this::businessMethod4);
}
/**
* 通过这个方法调用
* @param businessParams Map-key
* @param params 方法参数
* @return 返回值
*/
public String doMethod(String businessParams,String params){
return methodMap.get(businessParams).apply(params);
}
private String businessMethod1(String parameter){
return "业务方法一"+parameter;
}
private String businessMethod2(String parameter){
return "业务方法二"+parameter;
}
private String businessMethod3(String parameter){
return "业务方法三"+parameter;
}
private String businessMethod4(String parameter){
return "业务方法四"+parameter;
}
}
方法测试:
@SpringBootTest
@RunWith(SpringRunner.class)
public class FunctionTest {
@Resource
private TestFunctionInterfaceStrategy testFunctionInterfaceStrategy;
@Test
public void Test() {
String s = testFunctionInterfaceStrategy.doMethod("1", "====调用成功!====");
System.out.println(s);
}
}