java 实现规则引擎_Java规则引擎 Easy Rules

1.  Easy Rules 概述

Easy Rules是一个Java规则引擎,灵感来自一篇名为《Should I use a Rules Engine?》的文章

规则引擎就是提供一种可选的计算模型。与通常的命令式模型(由带有条件和循环的命令依次组成)不同,规则引擎基于生产规则系统。这是一组生产规则,每条规则都有一个条件(condition)和一个动作(action)———— 简单地说,可以将其看作是一组if-then语句。

精妙之处在于规则可以按任何顺序编写,引擎会决定何时使用对顺序有意义的任何方式来计算它们。考虑它的一个好方法是系统运行所有规则,选择条件成立的规则,然后执行相应的操作。这样做的好处是,很多问题都很自然地符合这个模型:

if car.owner.hasCellPhone then premium += 100;if car.model.theftRating > 4 then premium += 200;if car.owner.livesInDodgyArea && car.model.theftRating > 2 then premium += 300;

规则引擎是一种工具,它使得这种计算模型编程变得更容易。它可能是一个完整的开发环境,或者一个可以在传统平台上工作的框架。生产规则计算模型最适合仅解决一部分计算问题,因此规则引擎可以更好地嵌入到较大的系统中。

你可以自己构建一个简单的规则引擎。你所需要做的就是创建一组带有条件和动作的对象,将它们存储在一个集合中,然后遍历它们以评估条件并执行这些动作。

Easy Rules它提供Rule抽象以创建具有条件和动作的规则,并提供RuleEngine API,该API通过一组规则运行以评估条件并执行动作。

Easy Rules简单易用,只需两步:

首先,定义规则,方式有很多种

方式一:注解

@Rule(name = "weather rule", description = "if it rains then take an umbrella")public classWeatherRule {

@Conditionpublic boolean itRains(@Fact("rain") booleanrain) {returnrain;

}

@Actionpublic voidtakeAnUmbrella() {

System.out.println("It rains, take an umbrella!");

}

}

方式二:链式编程

Rule weatherRule = newRuleBuilder()

.name("weather rule")

.description("if it rains then take an umbrella")

.when(facts-> facts.get("rain").equals(true))

.then(facts-> System.out.println("It rains, take an umbrella!"))

.build();

方式三:表达式

Rule weatherRule = newMVELRule()

.name("weather rule")

.description("if it rains then take an umbrella")

.when("rain == true")

.then("System.out.println(\"It rains, take an umbrella!\");");

方式四:yml配置文件

例如:weather-rule.yml

name: "weather rule"description:"if it rains then take an umbrella"

你可能感兴趣的:(java,实现规则引擎)