Map+函数式接口方法 优雅的解决 if-else

网站建设3年前发布
22 00

​大家好,我是不才陈某~,最近写了一个服务:根据优惠券的类型resourceType​和编码resourceId来 查询 发放方式grantType和领取规则,实现方式:,优惠券有多种类型,分别对应了不同的数据库表:,实际的优惠券远不止这些,这个需求是要我们写一个业务分派的逻辑。,第一个能想到的思路就是if-else或者switch case:,如果要这么写的话, 一个方法的代码可就太长了,影响了可读性。(别看着上面case里面只有一句话,但实际情况是有很多行的)。,而且由于 整个 if-else的代码有很多行,也不方便修改,可维护性低。,策略模式是把 if语句里面的逻辑抽出来写成一个类,如果要修改某个逻辑的话,仅修改一个具体的实现类的逻辑即可,可维护性会好不少。,Map+函数式接口方法 优雅的解决 if-else,策略模式,策略模式在业务逻辑分派的时候还是if-else ,只是说比第一种思路的if-else 更好维护一点。,但缺点也明显:,用上了Java8的新特性lambda表达式:,这样子写的好处是非常直观,能直接看到判断条件对应的业务逻辑。,需求:根据优惠券(资源)类型 resourceType 和编码 resourceId 查询派发方式grantType。,上代码:,如果单个 if 语句块的业务逻辑有很多行的话,我们可以把这些 业务操作抽出来,写成一个单独的Service,即:,入参 String resourceId是用来查数据库的,这里简化了,传参之后不做处理。,用http调用的结果:,Map+函数式接口方法 优雅的解决 if-else,http调用的结果,用Map+函数式接口也有弊端:,你的队友得会lambda表达式才行啊,当然他不会的让他自己百度去!

© 版权声明

相关文章