在我的程序中,我正在通过Java套接字从客户端获取请求。每个请求都有一个唯一的命令标识符,该标识符对应于应用程序侧的指定命令。
现在,我有了一个带有很大开关的类,它根据收到的命令ID创建命令类的实例。此类ByteBuffer从客户端和ClientConnection对象接收带有请求数据的类(代表客户端与服务器之间的连接的类)。它从读取前两个字节ByteBuffer并获取相应的命令(扩展ClientRequestclass的class实例)。
例如:
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;
}
我不喜欢大型交换机的结构。我的问题是:是否有一些方法可以重构此代码以使其更优雅?也许使用一些模式?
另外,将来我想尝试在程序中使用依赖项注入(Guice),可以ClientRequest根据接收到的ID将其用于实例化实例吗?
相关分类