分享好友 最新动态首页 最新动态分类 切换频道
Java规则引擎 Easy Rules
2024-12-26 20:15

作者:废物大师兄

出处:https://www.cnblogs.com/cjsblog/p/13088017.html

1. Easy Rules 概述

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

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

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

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

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

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

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

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

方式一:注解

方式二:链式编程

方式三:表达式

方式四:yml配置文件

例如:weather-rule.yml

接下来,应用规则

入门案例:Hello Easy Rules

通过骨架创建maven项目:

默认给我们生成了一个HelloWorldRule规则,如下:

2. 规则定义

2.1. 定义规则

大多数业务规则可以用以下定义表示:

Easy Rules为每个关键点提供了一个抽象来定义业务规则。

在Easy Rules中,Rule接口代表规则

evaluate方法封装了必须计算结果为TRUE才能触发规则的条件。execute方法封装了在满足规则条件时应该执行的动作。条件和操作由Condition和Action接口表示。

定义规则有两种方式:

可以在一个POJO类上添加@Rule注解,例如:

@Condition注解指定规则条件 @Fact注解指定参数 @Action注解指定规则执行的动作

RuleBuilder支持链式风格定义规则,例如:

组合规则

CompositeRule由一组规则组成。这是一个典型地组合设计模式的实现。

组合规则是一个抽象概念,因为可以以不同方式触发组合规则。

Easy Rules自带三种CompositeRule实现:

复合规则可以从基本规则创建并注册为常规规则:

每个规则都有优先级。它代表触发注册规则的默认顺序。默认情况下,较低的值表示较高的优先级。可以重写compareTo方法以提供自定义优先级策略。

2.2. 定义事实

在Easy Rules中,Fact API代表事实

举个栗子:

或者,也可以用这样简写形式

用@Fact注解可以将Facts注入到condition和action方法中

2.3. 定义规则引擎

Easy Rules提供两种RulesEngine接口实现:

创建规则引擎:

然后,注册规则

规则引擎有一些可配置的参数,如下图所示:

举个栗子:

2.4. 定义规则监听器

通过实现RuleListener接口

3. 示例

4. 扩展

规则本质上是一个函数,如y=f(x1,x2,..,xn)

规则引擎就是为了解决业务代码和业务规则分离的引擎,是一种嵌入在应用程序中的组件,实现了将业务决策从应用程序代码中分离。

还有一种常见的方式是Java+Groovy来实现,Java内嵌Groovy脚本引擎进行业务规则剥离。

最新文章
马上就到!这波太猛!连云港人挺住……
今起又有一股冷空气影响我省从最低气温预报图来看14日早除了苏南部分城市徘徊在冰点其他城市都跌至-2~-3℃了15日严寒升级全省都将跌破0℃-4~-5℃其他地区-2~-3℃全省大部分地区还有冰冻据连云港天气预报未来一周以云系变化为主气温方面,受
服务器虚拟化能带来哪些收益?
服务器虚拟化收益在当今数字化时代,企业面临着日益增长的IT需求和复杂的管理挑战,服务器虚拟化作为一种创新的技术解决方案,正逐渐成为企业优化IT资源、提升运营效率的关键手段,通过服务器虚拟化,企业能够在单一物理硬件上运行多个虚拟
阿里内网热搜开发者工具在线教程推荐
来源|阿里巴巴云原生公众号近日,阿里内部的技术论坛 ATA 发布年度热搜关键词 top 100,Arthas 作为 Java 诊断神器是唯一进入 top 10 的非集团指定产品。Arthas 在阿里内部有多么受欢迎可见一斑。独乐乐不如众乐乐,2018 年 9 月,阿里就开
珠海市瑞刚科技取得一种计算机配套用扫描仪设备专利,达到对摄像头进行密封防尘的目的
金融界2024年12月16日消息,国家知识产权局信息显示,珠海市瑞刚科技有限公司取得一项名为“一种计算机配套用扫描仪设备”的专利,授权公告号 CN 222147668 U,申请日期为2024年3月。专利摘要显示,本实用新型涉及一种计算机配套用扫描仪设
面包屑导航(breadcrumbs)问题,如何优化以提升谷歌SEO?
在当今这个数字化时代,每一个网站都渴望在谷歌这个全球最大的搜索引擎上获得良好的排名。因为这不仅意味着更多的流量,还意味着更高的品牌知名度和转化率。而在这场激烈的SEO战役中,面包屑导航(breadcrumbs)作为一个常常被忽视的细节,
本文为剧本杀《凌州城八棺奇案》部分真相复盘剧透 获取完整真相复盘只需两步
​​《凌州城八棺奇案》是一款充满武侠气息的推理剧本,背景设定在一个江湖纷争不断的时代。剧本的开局即给玩家带来巨大的悬念——八具巨棺内藏尸首,每一具尸体都与江湖六大顶尖势力有着千丝万缕的关系。玩家们扮演的六位侠客,需穿越镜洲
谷歌浏览器安装下载软件亮点:
谷歌浏览器安装下载最新版是由Google开发的一款网络浏览器,旨在为Android设备用户提供快速、安全、便捷的浏览体验。该浏览器具有多种实用功能,能够满足用户的各种浏览需求。用户可以根据自己的需求和喜好,自定义浏览器的外观和功能。谷
置顶微信小程序开发快速入门-第一个页面编写(2/5)精选热门
我相信很多小伙伴看完上次的《微信小程序开发快速入门-小程序之开发前准备(1/5)》已经迫不及待想要开始编码了,今天就满足大家把代码给大家安排上!今天主要分享的内容有以下 2 个点:在这里我们会从官方提供的案例去阅读代码中的秘密,
门头沟将与百度、华为合作,共推京西人工智能产业发展
12月28日,门头沟区人民政府与百度智能云联合主办的“2023北京大模型产业暨数字经济发展论坛”成功举办。百度、华为、百图生科、瑞莱智慧等企业代表共话大模型与千行百业的深度融合。论坛上,门头沟区人民政府与百度智能云签署战略合作协议
网址批量缩短:方便快捷的链接管理工具
在如今信息爆炸的时代,网址的使用频率也随之增加。无论是在社交媒体平台分享链接,还是在电子邮件、信息传递等场景中使用,长串复杂的网址无疑会降低用户体验。为了解决这个问题,网址批量缩短工具应运而生。这些工具不仅可以简化网址,还
相关文章
推荐文章
发表评论
0评