2011-08-13 8 views
0

複数の種類の対処私は、単純なマルチキャストネットワーク上のプログラムを開発し、最高のクライアント/サーバーまたはクライアント/クライアントネットワークに合う最高のクラス構造とOODパターンにだけ興味があったんです。私のジレンマは、私はデータグラムを介して異なる種類のメッセージを送信することになり、受信機はちょうどそれらに来るバイトの束を見ている。今、私はすでにの「Hello World」を含むメッセージとインスタンスのユーザーの座標を含むものを区別するために、私のバイト配列のすべての最初のバイトとして「ID」プレースホルダーのようなものを実装しました。唯一の選択肢は、 "ID"が何であるかに基づいて私の "受信"方法でケースステートメントの膨大なセットを持っているようだが、これは悪い習慣のようだ。 JavaのOODパターンと万全のコーディング手法を活用するためのアイデアを探してください。サイドノートではJavaのソケットプログラミング:メッセージ

(私はこれはやや関連だと思う...)それはUEに私のために有利であろうではなく、ストリームオブジェクト?私はまだ来るeverythnについてinstancofをチェックしているようだった。ありがとう!

答えて

2

は、いくつかの可能性があるが、Strategy Patternは最高の法案を合わせているようです。状況に

、I、クラスが(自分のIDビットをチェックします)メッセージと実際にメッセージを処理するために別のものを扱うことができるかどうかを決定するために、少なくとも二つの方法1とのインターフェースを作成します。次に、メッセージの種類ごとに個別のメッセージ処理クラスを作成します。

受信メッセージハンドラには、これらのメッセージ処理オブジェクトのセットまたはリストがあります(通常、それぞれ異なるクラスですが、すべてがインターフェイスを実装します)。メッセージが受信されると、メッセージハンドラはメッセージを処理できるまでメッセージ処理オブジェクトを繰り返し処理し、メッセージプロセッサがメッセージを処理しない場合はエラーを返します。

+0

となるだろうこれは、あまりにも、良い反応です私と競合しません。彼はどのワイヤフォーマットを使用するかを決定する必要がありますが、メッセージタイプをさまざまなハンドラにディスパッチする方法も決定します。 – rbp

+0

これは試してみるときちんとしているように聞こえて、私がやろうとしていることを間違いなく達成するでしょう。さて、私のIDをリンクして正しい型のオブジェクトを作成するのであれば、IDとしてキーを、オブジェクト型に値を指定したハッシュを作成し、対応するオブジェクト型をインスタンス化するだけです。データをどのくらい正確に送信するかについては、私はまだ決めていません。 – philip

2

は、状況に応じて、ここでいくつかのオプションがあります。

  1. メッセージタイプごとに1つずつ、シリアル化されたオブジェクトを送信できます。直列化されたJavaは、通常のJavaアプリケーション間の唯一の仕事をオブジェクトが、あなたは(http://code.google.com/p/protobuf/)の相互運用可能なオブジェクトのためのプロトコルバッファを試すことができますaslo

  2. あなたのような相互運用可能なフォーマットで文書を送信することができますあなたがあなた自身のフォーマットを作る、と

私のようなあなたのようなテキストを解析することができますJSONまたはXML

  • 、私はおそらくプロトコルバッファ

  • +0

    Java以外で処理する必要がある場合や、メッセージ処理を自分でやりたい場合を除いては、シリアライズされたオブジェクトのアイデアを参照してください。良いコール。 – 101100

    +0

    ハッハッハ、私たちはお互いの答えを同時にコメントアップしてアップしました – rbp

    関連する問題