用一个例子说明行为参数化
带来的变化 - 从苹果仓库中筛选苹果
版本1
从一个苹果集合中选出绿的苹果
版本2
这时,如果需求变了,要从集合中选出红苹果,我们会这样
然后传入颜色参数来筛选
版本3
但是,如果现在要选出重量超过150g的苹果呢?在方法参数列表中多加一个weight么?
你会发现我们所有的代码,只有if判断中的条件发生了变化,这违反了DRY原则(Don’t Repeat Yourself)。
所以,我们把整个具体行为作为参数来传递,这样,方法体本身的代码就可以复用了。
|
|
现在,我们可以很灵活的调用了
版本4
其实,接口的具体实现,我们只会用到一次。所以,我们可以改成匿名类:
现在,代码已经变得非常简洁和灵活了。
版本5
从Java8开始,我们可以利用Lambda表达式,进一步改进代码:
现在,调用方法,我们只要一行代码,而且代码的可读性非常好。