引言
Drools 是一个基于 Java 的开源规则引擎,它允许开发者以规则的形式对业务逻辑进行建模和执行。本文将介绍 Drools 规则引擎的可用场景,并演示如何编写和预览规则。
规则引擎可用场景
规则引擎适用于各种业务场景,包括但不限于:
- 业务规则自动化:自动执行业务规则,减少人工干预。
- 实时风险评估:根据实时数据和事实进行风险评估和决策。
- 订单处理:基于订单属性和条件执行各种处理逻辑。
- 智能仓库选择:根据特定规则从仓库列表中做选择。
情景案例
假设需求
订单满减
100元以下,减1元
100元-200元,减3元
大于200,5元
稍微编程思想比较好的同学一般是这么写:
if (order.getTotalPrice() < 100){
order.setDiscount(1);
} else if (order.getTotalPrice() >= 100 && order.getTotalPrice() < 200){
order.setDiscount(3);
} else {
order.setDiscount(5);
}
有人可能会说,随着逻辑变更,这个 if...else
语句可能会变得很长不够优雅,所以,有些懂得设计模式的同学也许会这么做:
// 定义策略接口
interface OrderDiscountStrategy {
boolean match(Order order);
int calDiscount(Order order);
}
// 策略a
class PlanAOrderDiscountStrategy implements OrderDiscountStrategy {
@Override
boolean match(Order order) {
return order.getTotalPrice() < 100;
}
@Override
int calDiscount(Order order) {
return 1;
}
}
// 策略b
class PlanBOrderDiscountStrategy implements OrderDiscountStrategy {
@Override
boolean match(Order order) {
return order.getTotalPrice() >= 100 && order.getTotalPrice() < 200;
}
@Override
int calDiscount(Order order) {
return 3;
}
}
// 策略c
class PlanCOrderDiscountStrategy implements OrderDiscountStrategy {
@Override
boolean match(Order order) {
return order.getTotalPrice() > 200;
}
@Override
int calDiscount(Order order) {
return 5;
}
}
// 策略控制器
public class OrderDiscountStrategyContext {
private List<OrderDiscountStrategy> orderDiscountStrategies = new ArrayList<>();
public OrderDiscountStrategyContext() {
orderDiscountStrategies.add(new PlanAOrderDiscountStrategy());
orderDiscountStrategies.add(new PlanBOrderDiscountStrategy());
orderDiscountStrategies.add(new PlanCOrderDiscountStrategy()<