冗长的 if-else 块是开发人员的噩梦,很难维护,并且有很多副作用。sonar将这些代码块标记为“Cognitive complexities”。
Java8提供了函数接口,可以与Predicate配合,很好的替换传统的 if-else 代码块。
例如,如下代码块
image.png
我们可以借助predicates和functions将上面的 if-else 代码块转换为规则矩阵。if-else可以转换为predicate并且相应的执行规则可以转换为function。然后我们把predicate和相应的function存储到Map中,从而生成规则矩阵。
image.png
上面类中定义的 getRule 方法将接收一个对象 Cart,并通过filter过滤rulemap中的predicate 返回要应用于它的相应函数。
Function和Predicate可以定义为单独类中的常量,这将有助于扩展规则。
image.png
image.png
使用这个规则矩阵非常简单ー取出规则(即相应的函数)并应用到购物车上。就可以向复杂的代码块say byebye!
RuleMatrix.getRule(cart6).apply(cart6)
image.png
网友评论