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对象
...