规则引擎介绍
规则引擎又称为决策引擎,具体实现有很多种形式,比如由单个规则构成的规则集、用于评分的评分卡、多维度条件计算的决策表等;无论形式上怎么变化,归纳下来无非就是“如果…那么…否则”三大部分。
在“如果”和“那么”之间,用于存放规则的条件;“那么”之后定义若干个动作,这些动作在条件满足后执行;“否则”的后面也是若干个动作,这些动作在“如果”和“那么”之间条件不满足的时候执行。
当然也不是所有规则引擎都有“如果…那么…否则”三大部分,比如Drools里只有“如果…那么”没有“否则”,这在使用的时候多少会带来一些麻烦,这点在使用的时候就会发现。
单个规则结构
前面提到,无论规则引擎产品提供了多少种规则工具,总结下来每种规则工具实现的逻辑都是“如果…那么…否则”三大部分,下图当中展示了URule这款规则引擎产品向导式规则集的结构,可以非常明显看到规则结构的三大部分。
在上图中的两个规则当中,因URule提供的规则条件部分是图形化方式展现,所以条件阅读起来就容易的多,“那么”和“否则”部分定义了一条条的动作,分别在条件满足和不满足的时候执行。
在Drools中,规则体部分就没有“否则”,如下所示:
rule "rule1"
when
$order:Order(items not contains "手机");
then
System.out