总结
这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家
// 从两个原始规则创建组合规则
UnitRuleGroup myUnitRuleGroup =
new UnitRuleGroup(“myUnitRuleGroup”, “unit of myRule1 and myRule2”);
myUnitRuleGroup.addRule(myRule1);
myUnitRuleGroup.addRule(myRule2);
// 像常规规则一样注册组合规则
Rules rules = new Rules();
rules.register(myUnitRuleGroup);
RulesEngine rulesEngine = new DefaultRulesEngine();
rulesEngine.fire(rules, someFacts);
复制代码
规则优先级
Easy Rules中的每个规则都有一个优先级。这表示触发注册规则的默认顺序。默认情况下,值越低优先级越高。要覆盖此行为,您应该重写compareTo()
方法以提供自定义优先级策略。
-
如果是继承
BasicRule
,可以在构造方法中指定优先级,或者重写getPriority()
方法。 -
如果是使用POJO定义规则,可以通过
@Rule
注解的priority
属性指定优先级,或者使用@Priority
注解标记一个方法。这个方法必须是public
,无参却返回类型为Integer
。 -
如果使用
RuleBuilder
定义规则,可以使用RuleBuilder#priority()
方法指定优先级。
Rules API
Easy rules中的一组规则由rules API表示。它的使用方法如下:
Rules rules = new Rules();
rules.register(myRule1);
rules.register(myRule2);
复制代码
Rules
表示已注册规则的命名空间,因此,在同一命名空间下,每一个已经注册的规则必须有唯一的名称。
Rules
是通过Rule#compareTo()
方法进行比较的,因此,Rule
的实现应该正确的实现compareTo()
方法来确保单一空间下拥有唯一的规则名称。
定义事实
Easy Rules中的一个事实是由Fact
表示的:
public class Fact {
private final String name;
private final T value;
}
复制代码
一个事实有一个名称和一个值,两者都不能为null
。另一方面,Facts
API 表示一组事实并充当事实的命名空间。这意味着,在一个Facts
实例中,事实必须有唯一的名称。
下面是一个如何定义事实的例子:
Fact fact = new Fact(“foo”, “bar”);
Facts facts = new Facts();
facts.add(fact);
复制代码
你也可以使用一个更短的版本,用put方法创建命名的事实,如下所示:
Facts facts = new Facts();
facts.put(“foo”, “bar”);
复制代码
可以使用@Fac