1

プラットフォームなどに何らかの接続を持つオブジェクトがあるとします。たとえば、さまざまなロボットを制御できる離れた Web サイトに接続するために使用されるオブジェクトです。

プロデューサー オブジェクトは、これらのロボットを表す接続を介して多数のインスタンスを取得するために使用されます。これらのオブジェクトは、すべての操作が接続を通過する必要があるという点で、最初のオブジェクトに依存しています。したがって、ローカル コードはプロデューサー オブジェクトを介して呼び出しを行うだけです。

ロボット <-> 接続 <-> robotObjects

元のオブジェクトは、これらのインスタンスごとに、変更を中継する特定の数のユーティリティ メソッドを持つことができます。ただし、それはすべてを実行するある種の「神」クラスに変わる可能性があります。

このような場合、どのように責任を分担しますか?

PS: より良いタイトルを提案してください。

4

1 に答える 1

1

あなたが説明することは、プロキシパターンに非常に似ています:

  • インターフェースがあり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, ...);
  }
}
于 2012-09-09T23:25:47.013 に答える