使用Function简化代码逻辑。

目录

一:问题&需求

二:java.util.function

三:根据需求分开讨论。

3.1:差异代码既需要参数也有返回结果。

3.2: 其余情况要么不需要参数,要么不需要返回结果,不再讨论。

四:如何按需设计自己的function



一:问题&需求

代码难免会有很多重复代码的部分,比如数据检测,数据处理,数据返回。

如果这一部分交给了框架处理(AOP),自然是轻松的多。

先说简单的情况如下所示,按照idea提示,大概就是把通用代码提取出来。

差异化代码1

通用代码

差异化代码2

但是如果遇到以下情况呢?

通用前置检测代码

差异化代码

通用后置返回代码

你会怎么做?当然最好的办法是,写个方法把差异化代码当作参数传入进行执行。

二:java.util.function

做之前需要先了解jdk自带的  java.util.function  包,列举几个常用的和如何自己扩充构建。

Supplier<T>                        T get()
Consumer<T>                        void accept(T t)
Function<T, R>                     R apply(T t)
BiConsumer<T, U>                   void accept(T t, U u)
BiFunction<T, U, R>                R apply(T t, U u)
....

等等很多,但就是做了一件事儿:接受若干个参数,以及是否要有返回值。

三:根据需求分开讨论。

3.1:差异代码既需要参数也有返回结果。

如果差异化代码需要前置代码的一个参数,并且返回一个参数交给后置代码执行。可以使用Consumer函数,具体如下。

public static void main(String[] args) {
    System.out.println(service1());
    System.out.println(service2());
}

//业务代码1
static String service1() {
    return efficient((intParam) -> {
        //差异化代码
        intParam = intParam * 100;
        return "A" + intParam + "A";
    });
}

//业务代码2
static String service2() {
    return efficient((intParam) -> {
        //差异化代码
        intParam = intParam * 666;
        return "B" + intParam + "B";
    });
}

static String efficient(Function<Integer, String> function) {
    //前置代码。
    //假设差异化代码需要前置代码执行结果为int的参数。
    int a = (int) (System.currentTimeMillis() % 10);

    String result = function.apply(a);

    //后置代码。
    //假设后置代码需要差异化代码执行结果为string的参数。
    return "you result is :" + result;
}

执行结果

you result is :A300A
you result is :B1998B

3.2: 其余情况要么不需要参数,要么不需要返回结果,不再讨论。

四:如何按需设计自己的function

 jdk自带的还是很局限,所以需要按需设计。

比如我需要三个传参,一个返回。可以设计如下

public interface ThreeFunction<A, B, C, R> {

    R apply(A a, B b, C c);

}

设置是n个传参,是否返回都可以类似设计。 

五:实际使用结果

controller层缩减了:547->306 缩减了44%

service层缩减了:806->566 缩减了30%

带来的是代码更加直观,简单,明了。

  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值