0

RMIを使用してインスタントチャットアプリケーションを作成しています。サーバーは、クライアントが処理する必要のある特定のオブジェクトを送信します。たとえば、サーバーはJoinedGroupOperationクラスを送信します。クライアントアプリケーションでは、クラスを認識し、ハンドラーに引き継がせる必要があります(HandleJoinedGroupOperation)。このクラスは、クライアント側でたくさんのことを行います。

私の質問は、サーバーからのクラスをどのように処理できるので、ifステートメントを実行する必要がないかということです。すなわち

if(server.getResponse() instanceof JoinedGroupOperation){
    HandleJoinedGroupOperation handle = new HandleJoinedGroupOperation();
    handle.foo();
}
4

1 に答える 1

0

あなたの場合の可能なオプションの1つは、責任の連鎖 設計パターンを使用することです。可能なハンドラー(のようなHandleJoinedGroupOperation)の抽象化を作成してから、それらのハンドラーをリンクする必要があります(できれば開始時に)。例として、インターフェースを作成します

 interface OperationHandler {
     void handle(Operation op);
}

ここで、Operationはすべての可能な操作の基本タイプでもあります。このtype(Operation)には、列挙型OperationTypeのフィールドを含めることができます。

enum OperationType {
...
}

次に、具体的なハンドラーで、このフィールドを簡単に確認できます(ただし、ifステートメントは含まれますが、これらのステートメントは特定の各ハンドラーにカプセル化されます)

簡単な例として、ハンドラーのデフォルトの実装を次に示します。

class SimpleHandler implements OperationHandler {
 private OperationHandler next;

 public void handle(Operation op) {
     if (op.getType() == OperationType.SOMEYOURTYPE) {
        //do some stuff
     } else {
        next.handle(op);
     }
 }
}

この場合、server.getResponse()メソッドは単純に基本タイプのOperation階層を返します

詳細については、記事もお読みください

于 2012-11-01T21:21:10.283 に答える