Skip to content
Anthony Li edited this page May 9, 2016 · 10 revisions

安装

使用 maven

编辑 pom.xml 文件,添加依赖

<dependency>
    <groupId>com.muziyuchen</groupId>
    <artifactId>g-rule</artifactId>
    <version>1.0</version>
</dependency>

第一个应用

现在以下图所示规则为例,创建一个 g-rule 应用,根据年龄判断一个人是否被允许访问成人网站。

规则流程图

创建 Condition 类

条件(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 类

行为(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: 
// 我可以访问成人网站么?
// 还不行!
Clone this wiki locally