最新Java规则引擎easy-rules详细介绍(2),java虚拟机内存模型面试

总结

这个月马上就又要过去了,还在找工作的小伙伴要做好准备了,小编整理了大厂java程序员面试涉及到的绝大部分面试题及答案,希望能帮助到大家

在这里插入图片描述

在这里插入图片描述

本文已被CODING开源项目:【一线大厂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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值