实施规则系统

时间:2011-09-20 11:01:12

标签: java android rule-engine

我正在构建一个Android应用程序,它允许根据特定条件将对象合并在一起。目前,我希望使用if语句(嵌套或不嵌套)来执行此操作,我只是想知道是否有更好的方法来执行此操作,因此它更灵活,更容易扩展。

例如,我有6个对象,其中3个是红色,2个是蓝色,1个是绿色。

可以应用的规则是:

  • 可以合并3个红色
  • 2蓝色可以合并
  • 可以合并1个红色,1个蓝色和1个绿色
  • 可以合并1个红色和1个蓝色
  • 可以合并1个红色和1个绿色
  • 可以合并1个绿色和1个蓝色

这是一个非常基本的例子。除此之外还会有更多。

1 个答案:

答案 0 :(得分:2)

我可能会在以下地区做点什么:

创建一个Rule-class,它保存给定规则的逻辑(你的if语句)。规则应具有优先级,以便可以与其他规则进行匹配,以确定应首先考虑哪个规则。它还需要一种方法,可以将未确定数量的对象传递给它,以检查这些对象是否符合规则。

创建一个RuleEngine,它包含所有规则的排序列表(按优先级,最高优先)。然后,将您想要匹配的对象传递给引擎,引擎将运行它们,如果满足规则则打破循环:

for( Rule rule : rules ) {
  if( rule.check( objects ) ) {
    //Do what needs to be done
    break;
  }
}

我不知道这对你是否有意义 - 我希望如此。

此外,如果我们谈论成千上万的规则,这个解决方案并不是最佳的。在这种情况下,您需要确定对象在检查之前可能有哪些规则(例如,如果您有两个红色和一个绿色,则无需检查“每个规则之一”)。 / p>