有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

java处理来自RMI服务器的对象并将其委托给客户端中的对象

我正在使用RMI创建一个即时聊天应用程序。服务器通过我需要客户端处理的某些对象发送数据。 例如,服务器将发送一个JoinedGroupOperation类。在我的客户机应用程序中,我需要识别该类并让我的处理程序接管(HandleJoinedGroupOperation)。这个类将在客户端完成大量工作

我的问题是如何处理来自服务器的类,这样就不需要执行任何if语句?即

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

共 (1) 个答案

  1. # 1 楼答案

    在您的案例中,一个可能的选择是使用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层次结构的基本类型

    同时阅读文章以获得更多信息