我正在使用RMI创建即时聊天应用程序。服务器通过我需要客户端处理的某些对象发送。
例如,服务器将发送JoinedGroupOperation
类。在我的客户端应用程序中,我需要识别该类并让我的处理程序接管(HandleJoinedGroupOperation
)。这个课将在客户端做很多事情。
我的问题是我如何处理来自服务器的类,所以我不需要做任何if语句?即
if(server.getResponse() instanceof JoinedGroupOperation){
HandleJoinedGroupOperation handle = new HandleJoinedGroupOperation();
handle.foo();
}
答案 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
层次结构的基本类型
另请阅读文章以获取更多信息