Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/oop/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Oop 将责任与依赖性分离到一个中心;制作人;对象_Oop - Fatal编程技术网

Oop 将责任与依赖性分离到一个中心;制作人;对象

Oop 将责任与依赖性分离到一个中心;制作人;对象,oop,Oop,假设你有一个与平台或其他东西有某种连接的对象。例如,用于连接到远程网站的对象,您可以在其中控制各种机器人 producer对象用于通过表示这些机器人的连接获取几十个实例。这些对象依赖于第一个对象,因为任何操作都需要通过连接。因此,任何本地代码都只是通过producer对象进行调用 机器人连接机器人对象 对于这些实例中的每一个,原始对象都可以有一定数量的实用程序方法,这些方法将把更改中继回来。然而,这可能会把它变成一个“上帝”类,做任何事情 在这种情况下,你会如何划分责任 附言:请随意推荐一个更好

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

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

机器人连接机器人对象

对于这些实例中的每一个,原始对象都可以有一定数量的实用程序方法,这些方法将把更改中继回来。然而,这可能会把它变成一个“上帝”类,做任何事情

在这种情况下,你会如何划分责任


附言:请随意推荐一个更好的标题。

您所描述的内容听起来非常类似于:

  • 有一个
    机器人
    界面
  • 服务器通过一个具体的实现来控制真正的机器人,比如说
    RealRobot
  • 客户端有一个
    连接
    对象,该对象可以返回实现
    机器人
    接口的代理,但通过连接将调用转发给真正的机器人
连接
对象本身只提供基本的通信方法(例如发送和接收数据),不包含您描述的任何“实用方法”。代理实现将利用这些通信方法将调用中继到服务器

下面是一个例子:

共享接口:

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

您所描述的内容与以下内容非常相似:

  • 有一个
    机器人
    界面
  • 服务器通过一个具体的实现来控制真正的机器人,比如说
    RealRobot
  • 客户端有一个
    连接
    对象,该对象可以返回实现
    机器人
    接口的代理,但通过连接将调用转发给真正的机器人
连接
对象本身只提供基本的通信方法(例如发送和接收数据),不包含您描述的任何“实用方法”。代理实现将利用这些通信方法将调用中继到服务器

下面是一个例子:

共享接口:

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

您在Facebook实例中提到了一个现有的“用户对象”以及特定于用户的实用程序方法——您能详细说明一下吗?一些示例代码可能也会有所帮助。@casablanca I实际上是错的。当前的graph API只返回用户的id。其他请求通过路径完成,如
/me/likes/PAGE\u ID
。所以这是不适用的。我将编辑我的问题。好的。我重新提出了这个问题。希望更清楚。想一想,我可能只是简单地描述了数据和服务层的等价物或一些经典模式。你在Facebook实例中提到了一个现有的“用户对象”以及特定于用户的实用程序方法,你能详细说明一下吗?一些示例代码可能也会有所帮助。@casablanca I实际上是错的。当前的graph API只返回用户的id。其他请求通过路径完成,如
/me/likes/PAGE\u ID
。所以这是不适用的。我将编辑我的问题。好的。我重新提出了这个问题。希望更清楚。想一想,我可能只是简单地描述了数据和服务层的等价物或一些经典模式。我很想看到可能的答案。