如何理解jdk8通过行为参数化传递代码

行为参数化可以帮助你处理频繁变更需求的一种软件开发模式。

public static List<Apple> filterApples(List<Apple> inventory,ApplePredicate p){
     List<Apple> result =new ArrayList<>();
     for(Apple apple:inventory){
           if(p.test(apple)){
                result.add(apple);
           }
     }
     return restlt;
}


ApplePredicate是一个接口,定义了一个test方法,如果你有很多不同的需求,比如:筛选出红颜色的苹果的数量,筛选出重量大于150g的苹果数量等等
可以写多个实现类,重新test方法,实现不同的功能。这个p就是不同实例对象,一般这样    new ApplePredicateImpl1()写
filterApples方法的行为取决于你通过ApplePredicate对象传递代码,也就是说,filterApples方法的行为参数化了

我觉得行为参数化,其实类似于集成的方式,把你定义好的接口,实现类作为参数传到你需要处理的方法中,进行操作。
这种方式可以降低代码的耦合度,又能应对复杂多变的需求。


代码优化1:使用匿名类
匿名类:没有名字的一个类,允许同时声明和实例化一个类(允许你随用随建)
List<Apple> list=filterApples(List<Apple> inventory,new ApplePredicate(){

   public boolean test(Apple apple){
         return "red".equals(apple.getColor());
    }

}
);

缺点:代码笨重,占用了很多空间

代码优化2:使用Lambda表达式简化代码
List<Apple> list=filterApples(List<Apple> inventory,(Apple apple)-> "red".equals(apple.getColor()));

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值