-
Notifications
You must be signed in to change notification settings - Fork 31
Home
Anthony Li edited this page May 9, 2016
·
10 revisions
编辑 pom.xml 文件,添加依赖
<dependency>
<groupId>com.muziyuchen</groupId>
<artifactId>g-rule</artifactId>
<version>1.0</version>
</dependency>
现在以下图所示规则为例,创建一个 g-rule 应用,根据年龄判断一个人是否被允许访问成人网站。
条件(Condition)用于判断条件的真(true)和假(false),类似于编程语言中的 ifelse 语句。示例代码:
public class AgeCondition extends AbstractCondition { // ①
private boolean result = false;
@Override
public void run(Context context) throws UnitRunException { // ②
System.out.println("我可以访问成人网站么?");
int age = context.get("age");
this.result = age > 18;
}
@Override
public boolean getResult() { // ③
return result;
}
}
① 继承 AbstractCondition 抽象类
② 实现 run 方法,执行一段逻辑,并
③ 实现 getResult 方法,返回执行结果
行为(Action)用于执行一段逻辑,类似于编程语言中的代码块。示例代码:
public class AdultAction extends AbstractAction {
@Override
public void run(Context context) throws UnitRunException {
System.out.println("没问题!");
}
}
public class ChildAction extends AbstractAction {
@Override
public void run(Context context) throws UnitRunException {
System.out.println("还不行!");
}
}
首先,根据业务逻辑创建并装配规则。示例代码:
Condition age = new AgeCondition();
Action adult = new AdultAction();
Action child = new ChildAction();
age.registerTrueUnit(adult); // ①
age.registerFalseUnit(child); // ②
① 注册执行单元,当条件为真时,执行 adult
② 注册执行单元,当条件为假时,执行 child
然后,创建上下文,并向上下文中添加规则运行时需要的上下文数据。示例代码:
Context context = new SimpleContext();
context.put("age", new Integer(16)); // ①
① 向上下文中以 key-value 的方式添加数据
最后,获取规则引擎实例,设置入口单元并执行规则。示例代码:
RuleEngine.getInstance().setEntry(age).run(context);
// output:
// 我可以访问成人网站么?
// 还不行!