Java8函数方法和Lambda感悟

为了更清楚的理解为什么需要函数方法和Lambad,我们一步一步的以实际的场景案例来进行分析;

1.我们有很多钱,但是钱的面额有10,50,100,我们为了统计100元的有多少,我们的做法如下:

创建一个A类,A类有一个A'方法,该方法可以统计出100元的个数;

即该类将功能(筛选百元钞票的个数)进行了内嵌,如果需要则只需要创建该实例,调用该方法即可。

2.但当我们还需要筛选出特定要求的百元钞票的编号时,我们的做法如下:

1)基于A类,在A'方法上,进行一定的修改和扩充,实现筛选编号;

2)基于A类,写一个A''方法,实现钞票的筛选;

上面两个方法都只能解决少量的功能的实现,但是当需求增多时,则需会出现一个庞大的方法或者庞大的类;

同时为了遵循设计模式的基本原则:单一原则,一个类或者一个方法,尽可能的只负责一个功能;

我们的做法是:

使用一个B类,该类有一个功能,来实现统计百元钞票的个数,在使用该功能时,我们有以下做法:

1)我们常见创建一个B类实例,只需要将该对象传递给A类,作为A类某个方法的参数,然后在方法中调用B类的方法即可。(注意我们一般是创建一个接口,接口中有方法,然后创建需要的实现类)

3.当功能发生变动时,我们可以做如下改动:

1)在B类的基础上,对原有的方法进行修改;

2)在B类的基础上,创建一个新的方法;

2)创建一个新的类,实现新的功能;

4.当功能频繁变动,上面的方法的弊端就是需要修改或扩充类的方法,从而生成一个庞大的类,或者不停的创建一个新的类,但是对于这两种选择,我们选择横向扩展,即创建多个实现了单一功能的类,这样模块可以尽可能的小,但当进行调用的使用,我们又面临一个问题,即频繁的实例化类,对于不同的功能,我们需要显示的实例化不同的类,我们可以这样做:

1)使用匿名类,需要哪个类,当如果需要新的功能,直接在匿名类中写逻辑代码,但是会造成类的冗余

因此这个时候,Java8新的特性,思想是行为参数化,将一个行为作为参数传递给方法,从而应对频繁的需求改动:

注意:lambda行为参数化,只需要一个函数式接口(只有一个方法的接口),然后再调用的地方,可以直接写Lambda表达式,表达式可以实现同类功能的任意编写,即相同的返回值,只要返回值是接口定义方法的返回值,对于内部的逻辑实现,则可以自由编写,这样就不需要因为需求的变动而增加额外的类。可以将Lambda表达式,看做是函数式接口的实现。

5.当我们使用lambda时,我们通过表达式,有时候很难想起来该表达式实现了什么功能,为了更方便的识别方法的功能,Java8引入了方法引用:

方法引用可以看做是调用特定方法的一种快捷方式,它根据已有的方法创建Lambda表达式。

( Java8新特性:在接口中可以定义默认方法和声明静态方法,并且可以实现。)

 

这是本人对Lambda表达式和方法引用的一些理解。

 

如有问题,敬请指出,谢谢观看,与君共勉。

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值