JDK8内置函数式接口与策略模式

1. 行为参数化

策略设计模式

策略模式是定义一组算法,将它们封装起来(称为策略),在运行的时候选择合适的策略。

策略模式是通过“组合”的方式,将策略接口类定义为属性。而JDK8是通过参数的形式,将策略接口类定义为入参。

面对多变的逻辑时,我们将其与目标方法解耦合。客户端调用方法时,传递的不是一个简单的值,而是一个策略对象(实现策略接口)。目标方法会调用对象的方法,进行个性化的逻辑。

2. JDK8函数式接口

JDK8四大基础的函数式接口:

Consumer<T>:消费型接口:接收T对象,不返回值。
Supplier<T>:供给型接口:不接受对象,返回T对象。
Predicate<T>:断言型接口:接收T对象并返回boolean类型。
Function<T,R>:函数式接口:接收T对象返回R对象。

这四个接口就是JDK提供的基础的四大函数式接口(策略接口)。它们的区别就在于返回值的不同。在业务开发时,可以根据实际的要求选择合适的接口。

使用方式:

public class TestStrategy {
        happy(10.0, (t) -> {
            System.out.println("去shopping+:" + t);
        });
    }
    /**
     * 由客户端定义具体的消费端算法,目标方法会调用策略对象中的方法,实现个性化的业务操作。
     *
     * @param money 普通的参数值对象。
     * @param con   策略对象,目标方法会调用该对象的方法。
     */
    public static void happy(double money, Consumer<Double> con) {
        //调用传入对象的方法。
        con.accept(money);
    }
}

当然,JDK8也提供了一些扩展接口:

BiConsumer<T, U>:接收T对象和U对象,不返回值
BiPredicate<T, U>:接收T对象和U对象,返回boolean
BiFunction<T, U, R>:接收T对象和U对象,返回R对象
...

推荐阅读

模板模式和策略模式的区别

策略模式详解以及在spring中策略模式的两种简化应用

spring常用模式--------策略模式

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容