2016-05-02 12 views
0

たとえば、クラスNodeで表されるノードを実行する2つの異なるコンピュータがあるとします。各ノードはServerSocketをリッスンしています。コマンドパターンを適用しようとしています。私は今、私はそれが実行されたとき、それは、画面上のそれが送信されたノードのIDを印刷するようにコマンドを実装するクラスを作成したいinterfaceコマンドネットワークを介してオブジェクトにコマンドパターンを適用するには

public interface Command{ 
    public void execute(); 
} 

を持っています。 IDを印刷したいNodeオブジェクトへの参照をリモートコンピュータ上で実行しているため、参照を取得する方法がない場合、これをどのように行うことができますか?

public class PrintCommand implements Command{ 
    public void execute(){ 
      System.out.println("This node's id is " + ??); 
} 

コマンドパターンは、実際に同じマシンで実行するためにのみ適用できますか?

+0

クライアントとサーバーとしてJavaを使用しているため、結果ノードのIDを使用してRMIを使用してサーバーからコールバックすることができます –

答えて

1

network-excercicesには、コマンドパターンを使用できます。あなたが書いたように、リモートマシン上のNode-Objectの参照を取得することはできません。それは間違いです。 Java RMIのような技術では、別のJVMにあるリモートオブジェクトの参照を操作することができます。あなたが知るまでネットワークの問題を扱わなかった場合は、最初は分かりにくいかもしれませんが、実際には非常に使いやすいです。

さらに初歩的な作業をしたい場合は、Command-Interfaceからexecute-Methodを呼び出すソケットを介して、マシンAからマシンBにStringまたは多分数だけを送ることができます。マシンBは自分自身のNode-Objectを知っているので、そこから簡単に印刷することができます。マシンBのノードAのIDをプリントアウトする場合は、IDをBに送信する必要があります。

このアプローチは、シリアライゼーションを使用することができます。たとえば、オブジェクトをjsonにシリアル化し、ネットワーク接続経由​​で送信することができます。他のマシンでは、オブジェクトにデシリアライズしてexecute()メソッドに渡します。

関連する問題