easy-rules 目前支持三種組合模式的rule,以下是一個介紹,實際上我們可以參考實現進行擴展
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並執行
說明
如果看官方介紹,看着名字與功能,有點不是很匹配,結合源碼會好點