在前面的例子中,agent所作的工作都定义在了setup中,实际上它具有的行为和执行的动作都应该定义在behavious类中,我们可以对生成behavios类的实例,然后将任务或者动作代码放在对behavious类中的action方法中,action方法是必须要有的。Behavious类还有很多子类,分别对应着不同类型的behavious,包括SimpleBehaviour,sequences behaviors ,parallel behaviors,cyclic behaviors等。
一个agent的行为表示它能够执行的任务,通过继承jade.core.behaviours.Behaviour来实现。然后在agent类中通过addBehaviour()方法将行为加入进来。当一个agent启动(通过setup()方法)后,行为可以在任何时间加入进来。
要定义Behaviour必须实现其action()方法,它定义了agent的执行时的实际动作,而done()方法指名了一个行为是否已执行完毕,是否要从行为池中删除。
一个agent可以并发执行多个behaviour。每个agent线程启动后执行的过程如下:
实例:在netbeans工程中编写下列程序,过程如前所描述。
package examplesbehaviours;
import jade.core.Agent;
import jade.core.behaviours.Behaviour;
import jade.core.behaviours.CyclicBehaviour;
import jade.core.behaviours.OneShotBehaviour;
/**
*
* @author gj
*/
public class SimpleAgent extends Agent {
private class FourStepBehaviour extends Behaviour {
private int step = 1;
public void action() {
switch (step) {
case 1:
// Perform operation 1: print out a message
System.out.println("Operation 1");
break;
case 2:
// Perform operation 2: Add a OneShotBehaviour
System.out.println("Operation 2. Adding one-shot behaviour");
myAgent.addBehaviour(new OneShotBehaviour(myAgent) {
public void action() {
System.out.println("One-shot");
}
});
break;
case 3:
// Perform operation 3: print out a message
System.out.println("Operation 3");
break;
case 4:
// Perform operation 3: print out a message
System.out.println("Operation 4");
break;
}
step++;
}
public boolean done() {
return step == 5;
}
public int onEnd() {
myAgent.doDelete();
System.out.println("Finished!");
return super.onEnd();
}
} // END of inner class FourStepBehaviour
/** Creates a new instance of SimpleAgent */
public SimpleAgent() {
}
protected void setup() {
System.out.println("Agent "+getLocalName()+" started.");
// Add the CyclicBehaviour
addBehaviour(new CyclicBehaviour(this) {
public void action() {
System.out.println("Cycling");
}
}
);
// Add the generic behaviour
addBehaviour(new FourStepBehaviour());
}
}
运行参数为 jade.Boot –gui guojie: examplesbehaviours.SimpleAgent
输出结果:Agent guojie started.
Cycling
Operation 1
Cycling
Operation 2. Adding one-shot behaviour
Cycling
Operation 3
One-shot
Cycling
Operation 4
Finished!