引言:因java8引入lambda表达式。由此开启了函数式编程的元年
何为函数式编程
网上各有看法,有人说:函数式编程关心数据的映射,命令式编程关心解决问题的步骤。
也有人说:函数式编程是声明式的,它应该指定“什么要做”而非“怎么做”。在此之前java
的面向对象编程便也属于命令式编程。通过以下案例,深入理解函数式编程。
案例
public abstract class Drink {
abstract void configure();
public void drink(){
System.out.println("拿出杯子");
configure();
System.out.println("倒入开水");
}
}
Drink类是一个抽象类,有一个抽象方法configure,你可以配置任何你想喝的东西
public class DrinkTea extends Drink {
@Override
public void configure() {
System.out.println("放入茶叶");
}
}
public class DrinkCofe extends Drink {
@Override
public void configure() {
System.out.println("手磨咖啡豆");
System.out.println("咖啡倒入杯中");
}
}
DrinkTea配置了一杯茶,DrinkCofe配置了一杯咖啡
public class Test {
public static void main(String[] args) {
Drink drinkTea = new DrinkTea();
drinkTea.drink();
Drink drinkCofe = new DrinkCofe();
drinkCofe.drink();
}
}
// 输出结果如下
拿出杯子
放入茶叶
倒入开水
--------------------
拿出杯子
手磨咖啡豆
咖啡倒入杯中
倒入开水
这是设计模式中的装饰器模式。接下来用函数式编程实现一次
public abstract class Drink {
protected Consumer consumer;
public void drink() {
System.out.println("拿出杯子");
consumer.accept("");
System.out.println("倒入开水");
}
}
public class DrinkTea extends Drink {
public DrinkTea() {
this.consumer = o -> System.out.println("放入茶叶");
}
}
public class DrinkCofe extends Drink {
public DrinkCofe() {
this.consumer = o -> {
System.out.println("手磨咖啡豆");
System.out.println("咖啡倒入杯中");
};
}
}
输出的结果与上面一致,到这你可能会有疑问,我只不过是把configure()方法给替换了。 是的,这个案例我只为演示函数式编程的编写方式,从中去了解我们为什么要用函数式编程,什么时候需要函数式编程。从上面的代码我们能更清晰的找到函数入口,以及函数体,能很快定位问题。
总结
函数式编程让编程跟简洁,逻辑更通俗易懂。当然函数式编程本身有很多难以理解的理论,因为函数本身便能引出一堆理论。后面会写关于函数的认识,以及java中常用的函数接口,以及如何自定义函数接口。
欢迎扫描下面图片关注我的个人公众号,回复“资源”可以获取java核心知识整理和经典书籍