发布于2021-06-12 14:17 阅读(313) 评论(0) 点赞(22) 收藏(0)
扫描关注公众号查看更多内容
近期在研读《Java 8 in Action》中文版(中文《java8实战》),感觉受益良多,故想向大家分享这本书籍,并写下自己的对于其中的理解。
不知道大家在日常工作中当有一个需求在与客户讨论时,客户对于同一个功能的需求总是在变,或者是一段时间内需要这个,过一段时间又变成那个。
例如:当有个疫情级别城市查询,一开始想当1<疫情人数<5为中风险城市,你可能会这样写个方法
public String midLevelCity(People people){
if( 1 < people.getNumber() < 5){
return mid;
}else{
//其他情况
}
}
后面客户又想变成依靠疫情人数和地区人数的比例去计算的时候你怎么办,你是否是想每次都去变更这个方法呢?或者是在写一个midLevelCityNew(People people)的方法吗?在下下次又想变成人数或者比例的条件呢?
都是去变更方法吗?这样可不符合开闭原则!!
在面向对象编程领域中,开闭原则规定“软件中的对象(类,模块,函数等等)应该对于扩展是开放的,但是对于修改是封闭的”,这意味着一个实体是允许在不改变它的源代码的前提下变更它的行为。
这时候行为参数化的作用就来了
首先 我们创建一个接口,专门为这个行为“负责”
public interface MidLevelCity {
public boolean test(People people);
}
然后为每个可能需要的条件实现一个接口
public interface MidNumLevelCity implements MidLevelCity {
public boolean test(People people){
return 1 < people.getNumber() < 5;
}
}
public interface MidNumAndTotalLevelCity implements MidLevelCity {
public boolean test(People people){
return people.getNumber()/people.getTotal() < 0.00001;
}
}
如有更多可能的条件,都可依此创建
然后写个方法
public String midLevelCity(People people , MidLevelCity mid){
if(mid.test(people)){
return "mid";
}else{
//其他情况
}
}
这样 只需在传参时更改具体实现类即可,无需变更逻辑代码。
现在还能优化吗?答案是可以的
如我们看到了,这每次如果要变新的条件的话都要创建一个新的实现类,那岂不是也很繁琐
那么,就到了我们使用匿名内部类的时候了
匿名内部类可以使你的代码更加简洁,你可以在定义一个类的同时对其进行实例化。它与局部类很相似,不同的是它没有类名,如果某个局部类你只需要用一次,那么你就可以使用匿名内部类
我们每次调用时这样调用使用匿名内部类不就可以了,如下
xxx.midLevelCity(People people , new MidLevelCity(){
public boolean test(People people){
return 1 < people.getNumber() < 5;
}
})
Bingo!!!
这样就是最佳了吗?当然不是
再一次尝试,我们可以是用lambda表达式来使代码更加简洁
Lambda 表达式,也可称为闭包,它是推动 Java 8 发布的最重要新特性。
Lambda 允许把函数作为一个方法的参数(函数作为参数传递进方法中)。
使用 Lambda 表达式可以使代码变的更加简洁紧凑。
但是我们要注意的是,只有函数式接口才能使用lambda表达式,通俗来讲,函数式接口就是只有一个函数的接口。
xxx.midLevelCity(People people , (People people) -> 1 < people.getNumber() < 5;)
这样是不是最特别简洁明了了呀!!
1.行为参数化,就是一个方法接受多个不同的行为作为参数,并在内部使用他们,完成不同行为的能力。
2.行为参数化可让代码更好的适应不断变化的要求,减轻未来的工作量。
原文链接:https://blog.csdn.net/weixin_45115928/article/details/117736752
作者:java小王子
链接:http://www.javaheidong.com/blog/article/222099/cf2bc2e67a175da1f81c/
来源:java黑洞网
任何形式的转载都请注明出处,如有侵权 一经发现 必将追究其法律责任
昵称:
评论内容:(最多支持255个字符)
---无人问津也好,技不如人也罢,你都要试着安静下来,去做自己该做的事,而不是让内心的烦躁、焦虑,坏掉你本来就不多的热情和定力
Copyright © 2018-2021 java黑洞网 All Rights Reserved 版权所有,并保留所有权利。京ICP备18063182号-2
投诉与举报,广告合作请联系vgs_info@163.com或QQ3083709327
免责声明:网站文章均由用户上传,仅供读者学习交流使用,禁止用做商业用途。若文章涉及色情,反动,侵权等违法信息,请向我们举报,一经核实我们会立即删除!