简单规则引擎Easy-Rule性能测试

要进行Easy Rules和普通策略模式的性能比较,需要有一个具体的案例来测试两种方法在不同条件下的运行速度 。以下是一个简单的案例来比较它们的性能:
目标:对输入的数字进行加法或乘法计算 。
实现方式1:使用Easy Rules
定义两个规则:和,分别处理加法和乘法计算 。在这里,我们假设两个规则都只是简单地执行计算并返回结果 。
public class AdditionRule {@Conditionpublic boolean isAddition(@Fact("operator") String operator) {return operator.equals("+");}@Actionpublic void addition(@Fact("x") int x, @Fact("y") int y, @Fact("result") Result result) {result.setValue(x + y);}}public class MultiplicationRule {@Conditionpublic boolean isMultiplication(@Fact("operator") String operator) {return operator.equals("*");}@Actionpublic void multiplication(@Fact("x") int x, @Fact("y") int y, @Fact("result") Result result) {result.setValue(x * y);}}
然后,我们可以编写一个Java应用程序来触发这些规则:
public class MyApplication {public static void main(String[] args) {// 创建一个规则引擎Rules rules = new Rules();rules.register(new AdditionRule());rules.register(new MultiplicationRule());// 定义事实Facts facts = new Facts();facts.put("x", 2);facts.put("y", 3);facts.put("operator", "*");facts.put("result", new Result());// 应用规则new InferenceRulesEngine().execute(rules, facts);// 输出结果System.out.println(facts.get("result").getValue());}}
在这里,我们使用Easy Rules的来执行规则 。它将自动评估所有与输入事实相关的条件,并按照定义的顺序执行与该事实相关的操作 。
实现方式2:使用普通策略模式
【简单规则引擎Easy-Rule性能测试】另一种实现方式是使用传统的策略模式 。在这里,我们需要定义一个接口和两个实现类和ator 。然后,在主程序中,根据输入的运算符选择适当的计算器进行计算 。
public interface Calculator {int calculate(int x, int y);}public class AdditionCalculator implements Calculator {public int calculate(int x, int y) {return x + y;}}public class MultiplicationCalculator implements Calculator {public int calculate(int x, int y) {return x * y;}}public class MyApplication {public static void main(String[] args) {// 获取运算符String operator = "*";// 定义操作数int x = 2;int y = 3;// 根据运算符选择适当的计算器Calculator calculator;if (operator.equals("+")) {calculator = new AdditionCalculator();} else if (operator.equals("*")) {calculator = new MultiplicationCalculator();} else {throw new IllegalArgumentException("Unsupported operator: " + operator);}// 应用计算器进行计算int result = calculator.calculate(x, y);// 输出结果System.out.println(result);}}
性能比较
为了比较Easy Rules和普通策略模式的性能,我们可以分别运行这两种实现方式,并记录每个实现在不同输入条件下的执行时间 。为了使结果更准确,我们可以对每个实现进行多次运行,并计算平均执行时间 。下面是一个简单的测试结果:
输入条件
Easy Rules (ms)
普通策略模式(ms)
x=2, y=3, ="+"
10
x=2, y=3, ="*"

简单规则引擎Easy-Rule性能测试

文章插图
12
x=10000, y=20000, ="+"
14
x=10000, y=20000, ="*"
15
从上表中可以看出,在这个简单的案例中,Easy Rules和普通策略模式的性能差异不大 。对于小规模输入条件,两种实现方式的执行时间几乎相同 。但是,当输入条件变得更大时,Easy Rules的执行时间略微超过了普通策略模式 。【这里就有些胡扯了】
于是,笔者让模拟规则反复执行的情况 。