Как избежать instanceof при проверке типа сообщения

У меня следующая ситуация, когда клиентский класс выполняет другое поведение в зависимости от типа получаемого сообщения. Мне интересно, есть ли лучший способ сделать это, так как мне не нравятся instanceof и операторы if.

Одна вещь, о которой я подумал, это вытащить методы из клиентского класса и поместить их в сообщения. Я бы поместил метод, подобный process (), в интерфейс IMessage, а затем поместил поведение, специфичное для сообщения, в каждый из конкретных типов сообщений. Это сделает клиент простым, потому что он просто вызовет 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
        }
}

Ответы на вопрос(5)

Ваш ответ на вопрос