码迷,mamicode.com
首页 > 其他好文 > 详细

drools5工作流实例--猜数字

时间:2014-11-27 17:56:01      阅读:264      评论:0      收藏:0      [点我收藏+]

标签:des   blog   http   io   ar   os   sp   java   on   

*.java

package com.sample;

public class NumGuessMain
{

public static void main(String[] args)
{
KnowledgeBuilder kbuilder = KnowledgeBuilderFactory.newKnowledgeBuilder();
kbuilder.add(ResourceFactory.newClassPathResource("NumGuess.drl"), ResourceType.DRL);
kbuilder.add(ResourceFactory.newClassPathResource("NumGuess.rf"), ResourceType.DRF);
KnowledgeBase kbase = KnowledgeBaseFactory.newKnowledgeBase();
kbase.addKnowledgePackages(kbuilder.getKnowledgePackages());
StatefulKnowledgeSession ksession = kbase.newStatefulKnowledgeSession();
GameRules gr = new GameRules();
gr.setMaxRange(100);
gr.setAllowedGuesses(6);
ksession.insert(gr);
ksession.insert(new RandomNumber());
ksession.insert(new Game());
ksession.startProcess("Number Guess");
ksession.fireAllRules();
ksession.dispose();
}

}

public class Game
{
private int biggest;
private int smallest;
private int guessCount;
public Game()
{
this.biggest = 0;
this.smallest = 100;
this.guessCount = 0;
}
public void incrementGuessCount()
{
this.guessCount++;
}
public int getBiggest()
{
return biggest;
}
public void setBiggest(int biggest)
{
this.biggest = biggest;
}
public int getSmallest()
{
return smallest;
}
public void setSmallest(int smallest)
{
this.smallest = smallest;
}
public int getGuessCount()
{
return guessCount;
}
public void setGuessCount(int guessCount)
{
this.guessCount = guessCount;
}
}

public class GameRules
{
private int maxRange;
private int allowedGuesses;
public int getMaxRange()
{
return maxRange;
}
public void setMaxRange(int maxRange)
{
this.maxRange = maxRange;
}
public int getAllowedGuesses()
{
return allowedGuesses;
}
public void setAllowedGuesses(int allowedGuesses)
{
this.allowedGuesses = allowedGuesses;
}
public static boolean isNumber(String s)
{
try {
Integer.parseInt(s);
return true;
} catch (Exception e) {
return false;
}
}
}

public class Guess
{
private int value;
public Guess(int value)
{
this.value = value;
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
public String toString()
{
return "Guess " + this.value;
}
}

public class RandomNumber
{
private int value;
public RandomNumber()
{
this.value = new Random().nextInt(100);
}
public int getValue()
{
return value;
}
public void setValue(int value)
{
this.value = value;
}
}

NumGuess.drl

package com.sample
dialect "mvel"
import java.io.InputStreamReader;
import java.io.BufferedReader;
rule "Get User Guess"
ruleflow-group "Guess"
no-loop true
when
$r:RandomNumber()
rules:GameRules(allowed:allowedGuesses)
game:Game(guessCount<allowed)
not (Guess())
then
System.out.println("you have "+(rules.getAllowedGuesses()-game.getGuessCount())+" out of "+rules.getAllowedGuesses()+" guesses left.\nplease enter your guess from 0 to "+rules.getMaxRange());
br=new BufferedReader(new InputStreamReader(System.in));
s=br.readLine();
i=GameRules.isNumber(s)?(new Integer(s)):0;
modify(game){guessCount+=1}
insert(new Guess(i));
end
rule "Record the biggest Guess"
ruleflow-group "Guess"
no-loop true
when
game:Game(biggestGuess:biggest)
Guess($value:value>biggestGuess)
then
modify(game){biggest=$value}
end
rule "Record the smallest Guess"
ruleflow-group "Guess"
no-loop true
when
game:Game(small:smallest)
Guess($val:value<small)
then
modify(game){smallest=$val}
end
rule "Guess incorrect, retract Guess"
ruleflow-group "Guess incorrect"
when
guess:Guess()
then
retract(guess);
end
rule "No more Guesses notification"
ruleflow-group "No more guesses"
when
r:RandomNumber()
game:Game()
then
System.out.println("\nyou have no more guesses\nthe correct guess was "+r.value);
System.out.println("your smallest guess was "+game.smallest+"\nyour biggest guess was "+game.biggest);
end

NumGuess.rf

<?xml version="1.0" encoding="UTF-8"?>
<process xmlns="http://drools.org/drools-5.0/process"
xmlns:xs="http://www.w3.org/2001/XMLSchema-instance"
xs:schemaLocation="http://drools.org/drools-5.0/process drools-processes-5.0.xsd"
type="RuleFlow" name="Number Guess" id="Number Guess" package-name="com.sample" >

<header>
<imports>
<import name="com.sample.Game" />
<import name="com.sample.GameRules" />
<import name="com.sample.Guess" />
<import name="com.sample.RandomNumber" />
</imports>
</header>

<nodes>
<start id="1" name="Start" x="67" y="88" width="49" height="49" />
<end id="2" name="End" x="476" y="462" width="48" height="48" />
<join id="3" name="More guesses Join" x="69" y="174" width="145" height="49" type="2" />
<ruleSet id="4" name="Guess" ruleFlowGroup="Guess" x="48" y="285" width="80" height="49" />
<actionNode id="5" name="Guess correct" x="209" y="368" width="121" height="48" >
<action type="expression" dialect="mvel" >System.out.println( "You guessed correctly" );</action>
</actionNode>
<actionNode id="6" name="Too high" x="33" y="515" width="121" height="48" >
<action type="expression" dialect="mvel" >System.out.println( "Your guess was too high" );</action>
</actionNode>
<actionNode id="7" name="Too low" x="210" y="454" width="121" height="48" >
<action type="expression" dialect="mvel" >System.out.println( "Your guess was too low" );</action>
</actionNode>
<ruleSet id="8" name="No more guesses" ruleFlowGroup="No more guesses" x="425" y="292" width="145" height="49" />
<ruleSet id="9" name="Guess incorrect" ruleFlowGroup="Guess incorrect" x="606" y="514" width="125" height="48" />
<split id="10" name="Guess correct?" x="64" y="376" width="49" height="49" type="2" >
<constraints>
<constraint toNodeId="7" toType="DROOLS_DEFAULT" name="too low" priority="1" type="rule" dialect="mvel">
RandomNumber(val:value)
Guess(value &lt; val)
</constraint>
<constraint toNodeId="6" toType="DROOLS_DEFAULT" name="too high" priority="1" type="rule" dialect="mvel">
RandomNumber(val:value)
Guess(value &gt; val)
</constraint>
<constraint toNodeId="5" toType="DROOLS_DEFAULT" name="correct" priority="1" type="rule" dialect="mvel">
RandomNumber(val:value)
Guess(value == val)
</constraint>
</constraints>
</split>
<join id="11" name="Gateway" x="427" y="513" width="49" height="49" type="2" />
<split id="12" name="More Guesses?" x="634" y="159" width="49" height="49" type="2" >
<constraints>
<constraint toNodeId="8" toType="DROOLS_DEFAULT" name="no more guesses" priority="1" type="rule" dialect="mvel">
GameRules(allowed:allowedGuesses)
Game(guessCount &gt;= allowed)
</constraint>
<constraint toNodeId="3" toType="DROOLS_DEFAULT" name="more guesses" priority="1" type="rule" dialect="mvel">
GameRules(allowed:allowedGuesses)
Game(guessCount &lt; allowed)
</constraint>
</constraints>
</split>
<join id="13" name="Gateway" x="474" y="381" width="49" height="49" type="2" />
</nodes>

<connections>
<connection from="13" to="2" />
<connection from="1" to="3" />
<connection from="12" to="3" />
<connection from="3" to="4" />
<connection from="10" to="5" />
<connection from="10" to="6" />
<connection from="10" to="7" />
<connection from="12" to="8" />
<connection from="11" to="9" />
<connection from="4" to="10" />
<connection from="6" to="11" />
<connection from="7" to="11" />
<connection from="9" to="12" />
<connection from="5" to="13" />
<connection from="8" to="13" />
</connections>

</process>

bubuko.com,布布扣

drools5工作流实例--猜数字

标签:des   blog   http   io   ar   os   sp   java   on   

原文地址:http://www.cnblogs.com/feilv/p/4126633.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!