Java函数式编程-通过行为参数化传递代码

日新月异的需求

作为程序员,有一个很常见的问题是,同样的东西,用户的需求会经常改变

像我们之前找苹果的例子,需求经常变在动,如果都实现,那不得累死我们程序员?

如何应对多变的需求

此时又有新的需求:要区分重的苹果和轻的苹果:

行为参数化

可以使用ApplePredicate的多个实现来执行不同的行为

这些实现,就是不同的筛选条件,算法就是 ApplePredicate。怎么去利用这种不同的实现呢?需要filterApples方法接受ApplePredicate对象,对Apple做条件测试。那么现在就来修改之前的代码:

现在你把filterApples方法迭代集合的逻辑与你要应用到集合中每个元素的行为(这里是一个谓词)区分开了。

  • 这样一来,任何需求的变更,只需要增加相应的实现类即可。filterApples方法的行为取决于你通过ApplePredicate对象传递的代码。但是会有一个问题:类膨胀
  • 代码传递/行为
  • 在上述的实现中,我们发现,对于整个测试,唯一重要的就是test方法的实现,这个方法决定了需要怎么样进行过滤。
  • 所以在传递行为的时候,我们可以直接使用匿名内部类来传递,如下
  • 对于多个无用的代码,把匿名内部类更改为Lambda表达式就行


    prettyPrintApple 就可以实现了,如下

    你可以随时创建Comparator的实现,用sort方法表现出不同的行为。比如,你可以使用匿名类,按照重量升序对库存排序

    Lambda表达式

    小结

    展开阅读全文

    页面更新:2024-03-30

    标签:谓词   部类   参数   代码   函数   接口   颜色   苹果   需求   案例   方法

    1 2 3 4 5

    上滑加载更多 ↓
    推荐阅读:
    友情链接:
    更多:

    本站资料均由网友自行发布提供,仅用于学习交流。如有版权问题,请与我联系,QQ:4156828  

    © CopyRight 2008-2024 All Rights Reserved. Powered By bs178.com 闽ICP备11008920号-3
    闽公网安备35020302034844号

    Top