2012-04-11 25 views
0

私はリクエストをサーバに送るプログラムを持っています。リクエストにはさまざまな種類があり、それぞれに独自のクラスがあります。たとえば、サーバーに短いメッセージを送信するcheckServerOnlineRequest、まったく異なるメッセージを送信するgetAmountOfGoldRequestがあります。パラメータと異なるオブジェクトで呼び出された同じメソッド

class CheckServerOnlineReq{ 
    static final byte requestID = 1; 
    byte[] message; 

    void setMessage(byte messageNumber){ 
     message = new byte[2]; 
     message[0] = messageNumber; 
     message[1] = requestID; 
    } 
} 

私はClientクラスを持っています。それは私の質問は、私は、要求のいずれかのタイプを与えることができるようにsend()のパラメータを設定することができますどのように、ある

static方法は、(すなわち、異なるクラスの数)私は、要求のいずれかのタイプを受け入れたいどのsend呼ばれています議論として。

答えて

1

標準的な方法は、インターフェイスを宣言し、具体的な要求クラスは、そのインタフェースを実装することです:

public interface IRequest { ... } 

public class CheckServerOnlineRequest implements IRequest { ... } 
public class GetAmountOfGoldRequest implements IRequest { ... } 

その後send()メソッドは、引数としてIRequestを受け入れることができます。

public static void send(IRequest request) { ... } 
1

すべてのリクエストクラスは、定義したベースRequestクラスから拡張する必要があります。静的メソッドは、Request requestの引数を取る必要があります。ベースのRequestクラス(抽象的でも、インタフェースを実装する可能性もあります)は、リクエストの実際のタイプにかかわらず、Requestsのすべてのメソッドを定義する必要があります。 メソッドがタイプObjectの引数を取る可能性がありますが、キャストなしでObjectメソッドにしかアクセスできないため、実際には悪いことになります。

1

すべてのリクエストをリクエストクラス/インターフェースのサブクラス化/実装を行い、sendメソッドにRequest as argumentを付けさせる。

など。クラスCheckServerOnlineReqはリクエストを拡張/実装します..

send(請求リクエスト)

関連する問題