处理来自RMI服务器的对象并委派给客户端中的对象

时间:2012-11-01 20:33:13

标签: java rmi

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

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

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

1 个答案:

答案 0 :(得分:0)

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

 interface OperationHandler {
     void handle(Operation op);
}

其中Operation也是所有可能操作的基本类型。此类型(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层次结构的基本类型

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