`
啸笑天
  • 浏览: 3465515 次
  • 性别: Icon_minigender_1
  • 来自: China
社区版块
存档分类
最新评论

drools入门(二)-----规则引擎Drools解决汽水问题

阅读更多

喝汽水问题:
1元钱一瓶汽水,喝完后两个空瓶换一瓶汽水,问:你有50元钱,最多可以喝到几瓶汽水?(不能借空瓶,呵呵无商不奸)

 

answer:
1: 如果有超过一元钱, 则买一瓶汽水喝, 此时: 钱减少一元,同时拥有的空瓶增加一个。
2: 如果拥有至少两个空瓶, 则两个空瓶卖给老板兜里的钱加一(或是两个空瓶卖给老板换来一瓶汽水)。

SoftDrink.drl

#created on: 2011-10-18
package com.jsptpd.rjy.zyj.main
dialect "mvel"
#list any import classes here.
import com.jsptpd.rjy.zyj.main.SoftDrink.Customer

#declare any global variables here

rule "和了一瓶汽水"
    when
        $c:Customer(money>0,$m:money, $e:emptyBottle, $d :drinkBottleSum);
    then
        $c.money=$m-1;
        $c.emptyBottle=$e+1;
        $c.drinkBottleSum=$d+1;
        System.out.println($c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");
        update($c);
end

rule "用两个空瓶换了一瓶汽水"
    when
        $c:Customer(emptyBottle>1,$e:emptyBottle, $d:drinkBottleSum);
    then
        $c.emptyBottle=$e-2+1;
        $c.drinkBottleSum=$d+1;
         System.out.println($c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");
        update($c);
end

rule "结束"
    no-loop true	
    when
         $c:Customer(money<=0,emptyBottle<2);
    then
         System.out.println("计算结束:"+$c.getName()+"有 "+$c.getMoney()+" 元, 有空瓶 "+$c.getEmptyBottle()+" 个, 喝了 "+$c.getDrinkBottleSum()+" 瓶。");

end

SoftDrink.java

 

package com.jsptpd.rjy.zyj.main;

import org.drools.KnowledgeBase;
import org.drools.KnowledgeBaseFactory;
import org.drools.builder.KnowledgeBuilder;
import org.drools.builder.KnowledgeBuilderError;
import org.drools.builder.KnowledgeBuilderErrors;
import org.drools.builder.KnowledgeBuilderFactory;
import org.drools.builder.ResourceType;
import org.drools.io.ResourceFactory;
import org.drools.logger.KnowledgeRuntimeLogger;
import org.drools.logger.KnowledgeRuntimeLoggerFactory;
import org.drools.runtime.StatefulKnowledgeSession;

public class SoftDrink {

	/**
	 * @param args
	 */
	public static void main(String[] args) {
		try {
			KnowledgeBase knowledgeBase = readKnowledgeBase();
			StatefulKnowledgeSession statefulKnowledgeSession = knowledgeBase
					.newStatefulKnowledgeSession();
			KnowledgeRuntimeLogger knowledgeRuntimeLogger = KnowledgeRuntimeLoggerFactory
					.newFileLogger(statefulKnowledgeSession, "test");
			Customer customer=new Customer("小黄", 50, 0, 0);
			statefulKnowledgeSession.insert(customer);
			statefulKnowledgeSession.fireAllRules();
			knowledgeRuntimeLogger.close();
			statefulKnowledgeSession.dispose();
		} catch (Exception e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
	}

	private static KnowledgeBase readKnowledgeBase() throws Exception {
		KnowledgeBuilder knowledgeBuilder = KnowledgeBuilderFactory
				.newKnowledgeBuilder();
		knowledgeBuilder.add(ResourceFactory
				.newClassPathResource("SoftDrink.drl"), ResourceType.DRL);
		KnowledgeBuilderErrors knowledgeBuilderErrors = knowledgeBuilder
				.getErrors();
		if (knowledgeBuilderErrors.size() > 0) {
			for (KnowledgeBuilderError knowledgeBuilderError : knowledgeBuilderErrors) {
				System.out.println(knowledgeBuilderError);
			}
			throw new IllegalArgumentException("KnowledgeBuilder创建失败!");
		}

		KnowledgeBase knowledgeBase = KnowledgeBaseFactory.newKnowledgeBase();
		knowledgeBase.addKnowledgePackages(knowledgeBuilder
				.getKnowledgePackages());
		return knowledgeBase;
	}

	public static class Customer {
		private String name = "";
		private int money = 0;
		private int emptyBottle = 0;
		private int drinkBottleSum = 0;

		public Customer(String name, int money, int emptyBottle,
				int drinkBottleSum) {
			super();
			this.name = name;
			this.money = money;
			this.emptyBottle = emptyBottle;
			this.drinkBottleSum = drinkBottleSum;
		}

		public String getName() {
			return name;
		}

		public void setName(String name) {
			this.name = name;
		}

		public int getMoney() {
			return money;
		}

		public void setMoney(int money) {
			this.money = money;
		}

		public int getEmptyBottle() {
			return emptyBottle;
		}

		public void setEmptyBottle(int emptyBottle) {
			this.emptyBottle = emptyBottle;
		}

		public int getDrinkBottleSum() {
			return drinkBottleSum;
		}

		public void setDrinkBottleSum(int drinkBottleSum) {
			this.drinkBottleSum = drinkBottleSum;
		}
	}
}

 

运行结果:

....

....

 

小黄有 2 元, 有空瓶 2 个, 喝了 94 瓶。

小黄有 2 元, 有空瓶 1 个, 喝了 95 瓶。

小黄有 1 元, 有空瓶 2 个, 喝了 96 瓶。

小黄有 1 元, 有空瓶 1 个, 喝了 97 瓶。

小黄有 0 元, 有空瓶 2 个, 喝了 98 瓶。

小黄有 0 元, 有空瓶 1 个, 喝了 99 瓶。

计算结束:小黄有 0 元, 有空瓶 1 个, 喝了 99 瓶。

 

 

 

---------------------------------------------------------------------------------------------------------------------------------------- 

附件直接导入Eclipse中运行.

附件drl文件有java实现,这个是mvel实现。例外还有个重写的。

 

 

 

分享到:
评论
1 楼 smallduck155 2015-05-07  
嗯,学习了。感觉挺不错的

相关推荐

    jboss 规则引擎 drools库 drools-compiler-5.1.1.jar

    jboss 规则引擎 drools库。 api,core,compiler,jsr94 drools-compiler-5.1.1.jar

    drools-wb-7.10 tomcat 安装包

    标题中的"drools-wb-7.10 tomcat 安装包"指的是Drools Workbench的一个版本,这是Red Hat公司开发的一款基于Java的工作台,用于规则引擎Drools和决策服务KieServer的管理和开发。Drools是一款强大的业务规则管理系统...

    drools 5.0完整组件打包压缩文档 drools-5.0-bin.zip

    6. **drools-clips-5.0.1.jar**: 包含了对CLIPS(一种流行的规则引擎)的接口,使Drools能与CLIPS规则进行交互,为用户提供了更多的规则编写选择。 7. **drools-decisiontables-5.0.1.jar**: 支持决策表(Decision ...

    kie-drools-wb-7.5.0.Final-tomcat8整合kie-server7.5服务

    drools的workbench平台与kie-server的整个打包,通过tomcat8运行,搞了两天终于搞好了,drools-7.7.0目前界面显示还有问题,因此通过drools-7.5.0版本来运行,服务启动后可以通过代码的方式发送命令来执行规则引擎

    Drools入门-----------环境搭建,分析Helloworld

    Drools是一款强大的规则引擎,它允许开发者在Java应用程序中嵌入复杂的业务规则。这篇文章将带你入门Drools,从环境搭建开始,逐步解析“HelloWorld”案例,以理解其基本工作原理。 首先,我们需要安装并配置Drools...

    drools-distribution-6.3.0

    通过深入研究提供的示例,理解并实践其中的规则定义和执行过程,你将能够熟练地利用Drools这一强大的工具,解决业务中的复杂决策问题。同时,了解并运用好Drools的jar包,能够让你在实际项目开发中更加得心应手。

    drools-distribution-7.9.0.Final&spring;-drools-demo

    总的来说,"drools-distribution-7.9.0.Final&spring-drools-demo" 示例提供了一个完整的框架,帮助开发者深入了解 Drools 如何与 Spring 结合,实现灵活、可扩展的业务规则管理。通过深入研究这个示例,我们可以更...

    drools-core-4.0.4.jar

    drools-core-4.0.4.jar drools-core-4.0.4.jar

    kie-Drools-kie-server7.10.0+tomcat8

    dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...

    规则引擎Drools入门实战案例

    Drools入门案例 Drools基础语法 规则属性 Drools高级语法 Spring整合Drools Spring Boot整合Drools WorkBench Drools实战 个人所得税计算器 信用卡申请 保险产品准入规则 规则引擎,全称为业务规则管理系统,英文名...

    drools-templates-5.4.0.Final.jar

    drools-templates-5.4.0.Final.jar

    drools-persistence-jpa-5.2.0.Final.jar

    drools-persistence-jpa-5.2.0.Final.jar drools

    drools-all-jdk1.4-2.1.jar

    drools-all-jdk1.4-2.1.jar

    drools-distribution-7.7.0.Final

    drools规则引擎相关文件, 源码:\drools-distribution-7.7.0.Final\sources\drools-core-7.7.0.Final-sources.jar、 jar包:\drools-distribution-7.7.0.Final\binaries\drools-core-7.7.0.Final.jar、 API:\...

    Drools 业务规则管理系统 BRMS

    03-规则引擎Drools-Drools入门案例 ---01-Drools入门案例(业务场景说明).mp4 ---02-Drools入门案例(开发实现_1).mp4 ---03-Drools入门案例(开发实现_2).mp4 ---04-Drools入门案例(开发实现_3).mp4 ---05-...

    kie-Drools-workbench7.10.0+kie-server7.10.0+tomcat8 下载运行

    dools是一款开源规则引擎,drools-workbench是它的工作台web程序,可以编译,打包,发布规则,kie-server是可以运行规则的服务器程序, 两个服务单独部署,用户可以通过通过http请求发送数据,然后返回规则额匹配...

    drools-core-5.2.0.Final-sources.jar

    drools-core-5.2.0.Final-sources.jar

    drools-core-5.4.0.Final.jar

    drools-core-5.4.0.Final.jar

    drools文档教程-规则引擎文档

    Drools 规则引擎是一种基于 Java 的开源规则引擎,主要用来解决复杂的业务逻辑问题。下面是 Drools 规则引擎在在线申请信用卡业务场景中的应用。 问题引出现有一个在线申请信用卡的业务场景,用户需要录入个人信息...

Global site tag (gtag.js) - Google Analytics