将责任与中央“生产者”对象的依赖关系分开

时间:2012-09-09 01:38:56

标签: oop

假设您有一个与平台或其他类型有某种连接的对象。例如,用于连接到远程网站的对象,您可以在其中控制各种机器人。

生产者对象用于通过代表这些机器人的连接获取数十个实例。这些对象依赖于第一个对象,因为任何操作都需要通过连接。所以任何本地代码都只是通过生成器对象进行调用。

机器人< - >连接< - > robotObjects

原始对象可以为这些实例中的每个实例提供一定数量的实用程序方法,以便将更改中继。然而,这可以把它变成某种“神”类,它可以做任何事情。

在这种情况下你会如何分离责任?

P.S:随意提出一个更好的头衔。

1 个答案:

答案 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, ...);
  }
}