easy-rules 目前支持三種組合模式的rule,如下是一個介紹,實際上咱們能夠參考實現進行擴展git
UnitRuleGroup
- 代碼
@Override
public boolean evaluate(Facts facts) {
if (!rules.isEmpty()) {
for (Rule rule : rules) {
if (!rule.evaluate(facts)) {
return false;
}
}
return true;
}
return false;
}
- 說明
只要一個不符合,就都不執行了,就是要麼都執行,要麼都不執行
ActivationRuleGroup
- 代碼
@Override
public boolean evaluate(Facts facts) {
for (Rule rule : rules) {
if (rule.evaluate(facts)) {
selectedRule = rule;
return true;
}
}
return false;
}
- 說明
選擇第一個,其餘的就不執行了
ConditionalRuleGroup
- 代碼
@Override
public boolean evaluate(Facts facts) {
successfulEvaluations = new HashSet<>();
conditionalRule = getRuleWithHighestPriority();
if (conditionalRule.evaluate(facts)) {
for (Rule rule : rules) {
if (rule != conditionalRule && rule.evaluate(facts)) {
successfulEvaluations.add(rule);
}
}
return true;
}
return false;
}
- 說明
找到優先級最高的,若是符合,而後找到其餘的符合的rule並執行
說明
若是看官方介紹,看着名字與功能,有點不是很匹配,結合源碼會好點github