easy-rules 組合rule說明


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並執行

說明

如果看官方介紹,看着名字與功能,有點不是很匹配,結合源碼會好點

參考資料

https://github.com/j-easy/easy-rules/wiki/defining-rules


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM