1

HTMLRequest現在のプロジェクトには、、、のような複数のクラスがありSPDYRequestますBHIVERequest。ネットワーク ストリームからデータを取得し、どのクラスがこのデータを処理できるかを調べたいと考えています。このために、ストリーム パケットのヘッダーを読み取り (すべてのプロトコルは同じ形式であるため、空の行 (\r\n) を取得するまで読み取ることができます)、このヘッダーを要求クラスの静的関数に渡します。この種のリクエストのヘッダーかどうかを示すブール値。ここで、実行時に (プラグインから) 特定のプロトコルをロードできるようにしたいと考えています。ヘッダーのプロトコルがあるかどうかを確認できる最善の方法は何ですか。

私の考えは次のとおりです。

  • Protocolに登録されるシングルトンとしての追加のクラスはRequestFactory、どの Protocol がこの種のヘッダーのリクエストを作成できるかを調べ、 Protocol.assembly() を呼び出す必要があります。

  • リフレクションClass<? extends Request>またはClass.newInstance()

私は両方のアイデアが好きではないので、Java でこのようなことを動的に行う正しい方法は何ですか?

4

1 に答える 1

2

私だったら、オプション 1 と似たようなことをしますが、まったく同じではありません。

  • 起動時にすべてのプラグインを読み取り、ヘッダーとクラス名またはインスタンス (ステートレスの場合) への参照をHashMapaRequestFactoryまたは同様の名前のユーティリティに格納します。組み込みシステム プロトコルへの参照も、このマップに格納します。
  • リクエストが届いたら、 を呼び出してRequestFactory.getProtocol(String header)、使用するプロトコルへの参照を取得します。

このルートを使用する場合、ヘッダーが適切かどうかを照会できる各プロトコル クラスのメソッドは必要ないことに注意してください。工場がそれを処理します。

編集

...質問の「実行時」の部分に気付きました。これにより、ソリューションの「起動時」の部分が少しずれています。新しいプラグインは、認識/ロードされると、ファクトリの内部マップに登録される可能性があります。この設計全体の有用性に影響を与えるべきではありません。

于 2013-11-01T16:14:14.677 に答える