Methodenaufrufe in einer Queue

Hey,
ich hätte da nur eine Frage unzwar habe ich eine Queue mit Befehlen als Elemente. Wenn man diese Befehle aufruft, bekomme ich einen boolean zurück.

Die Frage ist jetzt, kann ich sowas überhaupt direkt in einere Queue speichern und wenn ja, wie führe ich dann diese Befehle aus ?

Viele Grüße
 

LimDul

Top Contributor
Zeig mal Code.

Im Prinzip so wie immer. Du hast eine Queue, die Objekte vom Typ Command/Befehl enthält, du kannst über die iterieren mit einer ganz normalen Schleife und den Befehl über seine Execute Methode ausführen.
 
K

kneitzel

Gast
Also was ist ein Befehl? In der Regel wirst Du da ein Interface oder so haben. Und das Interface hat dann ein execute() oder so.
Dann kannst Du natürlich die Queue durchgehen und für jeden Befehl execute() aufrufen.

Und da es ein funktionales Interface ist, kannst Du da alles mögliche speichern;
a) Selbstverständlich Instanzen von Klassen, die Befehl implementieren, also sowas wie class MyClass implements Befehl { ... }
b) Du kannst Lambda Ausdrücke verwenden
c) Du kannst Methodenreferenzen übergeben

Also Da sind Dir keine Grenzen gesetzt.
 
[CODE lang="java" title="Robot"]import java.util.*;
import java.util.function.Function;

public class Robot implements Command{
private Queue<Command> todo;
private Function<Robot, List<Command>> program;

public void setProgram(Function<Robot, List<Command>> newProgram){
program = newProgram;
}
private void think(){
List<Command> temp;
temp = program.apply(this);
for(int i = 0; i < temp.size() - 1; i++){
todo.add(temp.get(i));
}
}
private void act(){
if(todo.peek() != null || todo.peek().execute(this) != false){
//Befehl muss ausgeführt werden
act();
}
}
@Override
public boolean execute(Robot robot) {
//execute muss initialisiert werden
}[/CODE]

[CODE lang="java" title="Command Interface"]public interface Command {
boolean execute(Robot robot);
}[/CODE]
 
und die Befehle sind in der Robot-Klasse noch drin

[CODE lang="java" title="Commands"] /// Pre-programmed Commands
public boolean go(double distance) {
//step can be negative if the penguin walks backwards
double sign = Math.signum(distance);
distance = Math.abs(distance);
//penguin walks, each step being 0.2m
while (distance > 0) {
position.moveBy(sign * Math.min(distance, 0.2), direction);
world.resolveCollision(this, position);
distance -= 0.2;
}
return true;
}

public boolean turnBy(double deltaDirection) {
direction += deltaDirection;
return true;
}

public boolean turnTo(double newDirection) {
direction = newDirection;
return true;
}

public boolean say(String text) {
world.say(this, text);
return true;
}

public boolean paintWorld(Position pos, char blockType) {
world.setTerrain(pos, blockType);
return true;
}[/CODE]
 
K

kneitzel

Gast
Eine einfache Frage: Ist Robot ein Command?
Muss Robot Command implementieren?

Das musst Du Dir überlegen...

Und diese Commands im Robot - eigentlich hätte ich hier erwartet, dass man das entsprechend objektorientiert abbildet. Also das könnte man als eigenständige Klassen schreiben.

Das geht dann ja etwas Richtung Strategy Pattern....
 

Neue Themen


Oben