假设您有一个与平台或其他类型有某种连接的对象。例如,用于连接到远程网站的对象,您可以在其中控制各种机器人。
生产者对象用于通过代表这些机器人的连接获取数十个实例。这些对象依赖于第一个对象,因为任何操作都需要通过连接。所以任何本地代码都只是通过生成器对象进行调用。
机器人< - >连接< - > robotObjects
原始对象可以为这些实例中的每个实例提供一定数量的实用程序方法,以便将更改中继。然而,这可以把它变成某种“神”类,它可以做任何事情。
在这种情况下你会如何分离责任?
P.S:随意提出一个更好的头衔。
答案 0 :(得分:1)
您所描述的内容听起来与proxy pattern非常相似:
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, ...);
}
}