在我的程序中,我正在通過Java套接字從客戶端獲取請(qǐng)求。每個(gè)請(qǐng)求都有一個(gè)唯一的命令標(biāo)識(shí)符,該標(biāo)識(shí)符對(duì)應(yīng)于應(yīng)用程序側(cè)的指定命令?,F(xiàn)在,我有了一個(gè)帶有很大開關(guān)的類,它根據(jù)收到的命令I(lǐng)D創(chuàng)建命令類的實(shí)例。此類ByteBuffer從客戶端和ClientConnection對(duì)象接收帶有請(qǐng)求數(shù)據(jù)的類(代表客戶端與服務(wù)器之間的連接的類)。它從讀取前兩個(gè)字節(jié)ByteBuffer并獲取相應(yīng)的命令(擴(kuò)展ClientRequestclass的class實(shí)例)。例如:public static ClientRequest handle(ByteBuffer data, ClientConnection client) { int id = data.getShort(); //here we getting command id switch (id) { case 1: return new CM_ACCOUNT_LOGIN(data, client, id); case 2: return new CM_ENTER_GAME(data, client, id); //...... a lot of other commands here case 1000: return new CM_EXIT_GAME(data, client, id); } //if command unknown - logging it logUnknownRequest(client, id); return null;}我不喜歡大型交換機(jī)的結(jié)構(gòu)。我的問題是:是否有一些方法可以重構(gòu)此代碼以使其更優(yōu)雅?也許使用一些模式?另外,將來(lái)我想嘗試在程序中使用依賴項(xiàng)注入(Guice),可以ClientRequest根據(jù)接收到的ID將其用于實(shí)例化實(shí)例嗎?
添加回答
舉報(bào)
0/150
提交
取消