您的位置:首页 > 教育 > 锐评 > 网站建设师特点_做客服去哪个平台比较好_360建站系统_刷百度关键词排名

网站建设师特点_做客服去哪个平台比较好_360建站系统_刷百度关键词排名

2025/2/24 5:57:11 来源:https://blog.csdn.net/2301_79526467/article/details/142389408  浏览:    关键词:网站建设师特点_做客服去哪个平台比较好_360建站系统_刷百度关键词排名
网站建设师特点_做客服去哪个平台比较好_360建站系统_刷百度关键词排名

1. 概述

* 规则引擎核心思想:将应用程序中的业务决策部分分离出来
  
* 使得业务规则的变更不需要修改项目代码、重启服务器就可以在线上环境立即生效

 2. 执行流程

drools规则引擎由以下三部分构成:

 Working Memory(工作内存)
 Rule Base(规则库)
 Inference Engine(推理引擎)

其中Inference Engine(推理引擎)又包括:

 Pattern Matcher(匹配器) 具体匹配哪一个规则,由这个完成
 Agenda(议程)
 Execution Engine(执行引擎)

3. Drools基础语法

3.1 规则文件

在使用Drools时非常重要的一个工作就是编写规则文件,通常规则文件的后缀为.drl

 3.2 语法结构

* 规则体语法结构 开始位置 rule,结束位置 end
  
* 结构组成:

rule "ruleName"attributeswhenLHS thenRHS
end

rule:关键字,表示规则开始,参数为规则的唯一名称。

attributes:规则属性,是rule与when之间的参数,为可选项。

when:关键字,后面跟规则的条件部分。

LHS(Left Hand Side):是规则的条件部分的通用名称。它由零个或多个条件元素组成。如果LHS为空,则它将被视为始终为true的条件元素。 (左手边)

then:关键字,后面跟规则的结果部分。

RHS(Right Hand Side):是规则的后果或行动部分的通用名称。 (右手边)

end:关键字,表示一个规则结束。

3.3 模式匹配

rule "rule_1"when$order:Order(amout >100 && amout < 500)then$order.setScore(100);System.out.println("成功匹配到规则二:100元 - 500元 加100分");
end

 3.4 内置方法

Drools提供了一些方法可以用来操作工作内存中的数据,**操作完成后规则引擎会重新进行相关规则的匹配,**原来没有匹配成功的规则在我们修改数据完成后有可能就会匹配成功了。

修改 update方法
update方法的作用是更新工作内存中的数据,并让相关的规则重新匹配。

参数:

//Fact对象,事实对象
Order order = new Order();
order.setAmout(30);

规则:

rule "order_rule_1"when$order:Order(amout < 100)then$order.setAmout(150);update($order)System.out.println("成功匹配到规则一:100元以下 不加分");
endrule "order_rule_2"when$order:Order(amout >= 100 && amout < 500)then$order.setScore(100);System.out.println("成功匹配到规则二:100元 - 500元 加100分");
end

添加 insert方法

insert方法的作用是向工作内存中插入数据,并让相关的规则重新匹配

rule "order_rule_1"when$order:Order(amout < 100)thenOrder order = new Order();order.setAmout(150);insert(order);System.out.println("成功匹配到规则一:100元以下 不加分");
endrule "order_rule_2"when$order:Order(amout >= 100 && amout < 500)then$order.setScore(100);System.out.println("成功匹配到规则二:100元 - 500元 加100分");
end

删除 retract方法

retract方法的作用是删除工作内存中的数据,并让相关的规则重新匹配。

//规则一:100元以下 不加分
rule "order_rule_1"when$order:Order(amout < 100)thenretract($order)      //retract方法的作用是删除工作内存中的Fact对象,会导致相关规则重新匹配System.out.println("成功匹配到规则一:100元以下 不加分");
end

 4. Drools规则属性

4.1 salience属性

salience属性用于指定规则的执行优先级,取值类型为Integer。数值越大越优先执行
没有添加执行优先级,执行由上到下执行

package com.orderrule "rule_1"salience 9wheneval(true)thenSystem.out.println("规则rule_1触发");
endrule "rule_2"salience 10wheneval(true)thenSystem.out.println("规则rule_2触发");
endrule "rule_3"salience 8wheneval(true)thenSystem.out.println("规则rule_3触发");
end

 4.2 no-loop属性

no-loop属性用于防止死循环

//订单积分规则
package com.order
import com.atguigu.drools.model.Order//规则一:100元以下 不加分
rule "order_rule_1"no-loop true         //防止陷入死循环when$order:Order(amout < 100)then$order.setScore(0);update($order)System.out.println("成功匹配到规则一:100元以下 不加分");
end

 5. Drools高级语法

global关键字用于在规则文件中定义全局变量,它可以让应用程序的对象在规则文件中能够被访问。
语法结构为:global 对象类型 对象名称

//订单积分规则
package com.order
import com.atguigu.drools.bean.Order1global com.atguigu.drools.bean.Integral integral;//规则一:100元以下 不加分
rule "order_rule_1"no-loop true         //防止陷入死循环when$order:Order1(amout < 100)thenintegral.setScore(10);update($order)System.out.println("成功匹配到规则一:100元以下 不加分");
end

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com