2011-02-15 6 views
2

おはようございます。私はビルドしたいものに適しているかどうか疑問に思っています。このシナリオのコマンドパターン?アドバイス

本質的に、私はサーバーとのソケット接続を形成するクライアントを持っています。私のサーバーには、クライアントがメソッドを呼び出す必要がある1つのクラス 'foo'があります。

私のクライアントが呼び出す5つのメソッドがfooにあると言うことができます。私は過去にサーバ上で整備されたオブジェクトをマーシャリングする間違いを犯しました。次に、オブジェクト内の変数をチェックし、switch文を使用して、サーバロジックが呼び出されるアクションを決定することができます。

私はこれを避けたいので、私はコマンドパターンが私を助けるかもしれないと信じています。しかし、サーバー上の私の例 'foo'クラスでは、fooで呼び出される各メソッドのコマンドクラスを作成する必要がありますか?クライアントからサーバーに送信されるクラスをコマンドクラスにする必要がありますか?この場合、1台の受信機しか必要としませんか? - fooクラス?

ご協力いただきありがとうございます。ご迷惑をおかけしますが、ここでは「foo」クラス名を使用しています。具体的なクラス名はまだありません!

よろしくどんなにあなたが何をすべきか

+2

キーボードに「Shift」キーまたは「Caps Lock」キーがありますか? – fiction

+1

私のiPhoneからの書き込み、なぜですか? – Joeblackdev

+1

人があなたの質問を深刻に思うようにしたい場合は、大文字で始まる適切な文章を書くこと(「I」を書くこと)が重要です。 – hlovdal

答えて

4

、あなたは完全にそのスイッチ()文を取り除くことはできません。

はその後
abstract class AbstractCommand() { 
    abstract void execute(); 
} 
class ConcreteCommand extends AbstractCommand { 
    // execute implementation 
} 
// more command classes as needed; probably one per each of your method calls 

コマンドの工場を持っています:Commandパターンは、以下のあなたが行うことをお勧め

class CommandFactory { 
    AbstractCommand createCommandForMessage(Message m) { 
    // ... switch() goes here 
    } 
} 

、部品を受け、あなたのメッセージは、このような単純な次のようになります。

public class MessageReceiver { 
    public void work() { 
    while (true) { 
     Message m = receiveMessage(); 
     AbstractCommand command = commandFactory.createCommandForMessage(m); 
     command.execute(); 
    } 
    } 
} 

何がうれしいですこれについては、コマンドの実際のロジック(execute()メソッド実装)を、どのコマンドを使用するかを決定するロジックから、mesを受け取る方法を知っているロジックからきれいに分離することですネットワーク上のセージ。

+0

こんにちは、返信いただきありがとうございます。私は(私が読んだところから)コマンドパターンはスイッチや複数のelse/if条件付きロジックの必要性を排除すると考えました。また、ここで使用するccommandFactoryに従っているかどうかはわかりません。私がCommandパターンについて読んだ他の例とは異なるように、あなたは少し説明できますか?もう一度ありがとう。 – Joeblackdev

+0

また、コマンドパターンは、ソケット経由でサーバーアクションを呼び出すクライアントの手段として適していますか?おかげで – Joeblackdev

+1

あなたはスイッチ()を完全に排除することはできません:あなたが受け取るパケットのタイプに応じて、あなたはそれを別々に処理する必要があります。たとえば、のマップを使用できますが、論理的には同じことです。 CommandFactoryは実際にこのswitch()が起きる場所ですので、あなたのコードはきれいに3つの部分に分かれています:1.メッセージ受信者、2.コマンド作成者、3.コマンドロジック。私は過去のソケット通信にこの正確なパターンを使用しており、柔軟性があり、拡張が容易であることがわかったので、私はそれをお勧めします。 – iluxa

関連する問題