您所描述的听起来与代理模式非常相似:
- 有一个
Robot
接口。
- 服务器通过具体的实现来控制真实的机器人,比如说
RealRobot
。
- 客户端有一个
Connection
对象,它可以返回实现Robot
接口的代理,但通过连接将调用转发到真实的机器人。
该Connection
对象本身将仅提供基本的通信方法(例如发送和接收数据),并且不包含您描述的任何“实用方法”。代理实现将利用这些通信方法将调用中继到服务器。
这是一个例子:
共享界面:
public interface Robot {
void move(...);
}
服务器实现:
public class RealRobot implements Robot { ... }
客户端库:
public class Connection {
public Robot getRobot(int id) {
return new RobotProxy(id, this);
}
// ...
// methods for sending and receiving data
// ...
}
public class RobotProxy implements Robot {
private final int id;
private final Connection conn;
public RobotProxy(int id, Connection conn) {
this.id = id;
this.conn = conn;
}
public void move(...) {
conn.send("move", id, ...);
}
}