2012-04-11 80 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類。它static方法稱爲send,我願意接受任何類型的請求(即多個不同類)

我的問題是,我怎麼可以設置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類(可能是抽象的,可能實現一個接口 - 具體取決於究竟發生了什麼)應該定義請求使用的所有方法,而不管請求的實際類型如何。

如果不成功,您的send方法可能會引用Object類型的參數,但那樣會非常糟糕,因爲您只能在不投射的情況下訪問Object方法。

1

使所有請求子類/實現一個請求類/接口,並使您的發送方法具有請求作爲參數。

E.g. Class CheckServerOnlineReq擴展/實現請求..

發送(請求請求)

相關問題