У меня есть удаленный объект, предоставляемый через RMI, который я использую для выполнения нескольких операций с ресурсом, который содержит объект.Прямо сейчас у меня есть метод для каждой операции, которую мне нужно выполнить.
Пример:
public interface IRobotController {
public int walk(int meters);
public void dance(int seconds);
}
public interface RMIRobotController implements IRobotController, java.rmi.Remote {}
public class RobotController implements RMIRobotController {
private Robot robot;
...
public int walk(int meters) {
return robot.walk(meters);
}
public void dance(int seconds) {
robot.dance(seconds);
}
}
Я бы хотел реорганизовать API, чтобы у меня был только один метод, operate()
.Предположим, я не хочу возвращать реальную ссылку на объект робота через RMI, потому что мне иногда нужно выполнить более одной операции, и я не хочу туда-сюда.
Я придумал это,на основе концепции Callable<T>
:
public abstract class RobotCallable<T> {
protected Robot robot;
public void setRobot(Robot robot) {
this.robot = robot;
}
public abstract T call()
}
public class RobotController implements RMIRobotController {
private Robot robot;
...
public T operate(RobotCallable<T> robotCallable) {
robotCallable.setRobot(robot)
return robotCallable.call();
}
}
И это, как эти вещи обычно реализуются?Есть ли какой-то механизм для RMI, который делает это автоматически?