基于请求标识符的客户请求工厂

在我的程序中,我正在通过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将其用于实例化实例吗?


犯罪嫌疑人X
浏览 120回答 1
1回答
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java