我有以下情况,其中客户端类根据它接收到的消息类型执行不同的行为。我想知道是否有更好的方法来做到这一点,因为我不喜欢 instanceof 和 if 语句。
我想做的一件事是将方法从客户端类中提取出来并将它们放入消息中。我会在 IMessage 接口中放置一个类似 process() 的方法,然后将特定于消息的行为放在每个具体的消息类型中。这将使客户端变得简单,因为它只会调用 message.process() 而不是检查类型。但是,唯一的问题是条件中包含的行为与对 Client 类中包含的数据的操作有关。因此,如果我确实在具体的消息类中实现了一个流程方法,我将不得不将它传递给客户端,我也不知道这是否真的有意义。
public class Client {
messageReceived(IMessage message) {
if(message instanceof concreteMessageA) {
concreteMessageA msg = (concreteMessageA)message;
//do concreteMessageA operations
}
}
if (message instanceof concreteMessageB) {
concreteMessageb msg = (concreteMessageB)message;
//do concreteMessageB operations
}
}