0

我正在使用 RMI 创建一个即时聊天应用程序。服务器通过我需要客户端处理的某些对象发送。例如,服务器将发送一个JoinedGroupOperation类。在我的客户端应用程序中,我需要识别类并让我的处理程序接管(HandleJoinedGroupOperation)。这个类将在客户端做很多事情。

我的问题是如何处理来自服务器的类,所以我不需要做任何 if 语句?IE

if(server.getResponse() instanceof JoinedGroupOperation){
    HandleJoinedGroupOperation handle = new HandleJoinedGroupOperation();
    handle.foo();
}
4

1 回答 1

0

在您的情况下,一种可能的选择是使用责任链 设计模式。您应该创建一些可能的处理程序的抽象(如HandleJoinedGroupOperation),然后链接这些处理程序(最好在开始时)。例如,创建一个接口

 interface OperationHandler {
     void handle(Operation op);
}

whereOperation也是所有可能操作的基本类型。这个 type( Operation) 可以包含一个枚举类型 OperationType 的字段:

enum OperationType {
...
}

然后在具体的处理程序中你可以简单地检查这个字段(虽然它会包含if语句,但这些语句将被封装在每个特定的处理程序中)

作为一个简单的例子,这里是一个处理程序的默认实现

class SimpleHandler implements OperationHandler {
 private OperationHandler next;

 public void handle(Operation op) {
     if (op.getType() == OperationType.SOMEYOURTYPE) {
        //do some stuff
     } else {
        next.handle(op);
     }
 }
}

在这种情况下,您的server.getResponse()方法只会返回基本类型的Operation层次结构

另请阅读文章以获取更多信息

于 2012-11-01T21:21:10.283 回答