二、案例
班导想了解一下各个同学的相关情况:
1、来自苏州的有哪些同学
2、地区参数化
这样是不是就解决了,所有地区的查询问题,把地区作为一个参数。
问题好像得到了解决,突然班导又要知道同学们的年龄分布。
3、可以查出20岁以上的学生
三、改造一下
因为上面是两个方法,很多小伙伴会想到可以改成一个方法,用flag标记查询的业务。
改为一个方法,flag为true 表示根据年龄范围查找学生;flag为false,表示查地区里面的学生
调用方式
List<Student> areaStudentList = filterStudent(students,"苏州",0,false);List<Student> ageStudentList = filterStudent(students,"",20,true);
四、策略模式
还好我们的小伙伴们知道一点设计模式,那用策略模式进行改造吧
定义一个接口,用来进行过滤的接口,我们可以实现这个接口,去完成不同的需求,如:
上面定义了两种查询条件,都是实现了StudentPredicate接口,那我们再看看主方法
上面的核心代码就是p.test(stu);这个就是查询条件逻辑实现方法;要查询某个业务,只需要把相关业务的接口实现传给这个主方法就行了。
上面的方式代码相对比较优美,如有别的查询需求,只要实现StudentPredicate接口就行了。但这点也是个缺点,每个需求都要去写相关的接口实现。
五、匿名类
为了解决接口实现太多,可以采用匿名类去解决,再来优化一下
六、Lambda表达式
我们来看看Lambda表达式的实现
小伙伴们看看,是不是很简洁。
领取专属 10元无门槛券
私享最新 技术干货