Vermeiden von Instanzen bei der Überprüfung eines Nachrichtentyps

Ich habe die folgende Situation, in der eine Clientklasse je nach Art der empfangenen Nachricht ein anderes Verhalten ausführt. Ich frage mich, ob es einen besseren Weg gibt, dies zu tun, da mir die instanceof- und if-Anweisungen nicht gefallen.

Eine Sache, über die ich nachgedacht habe, war, die Methoden aus der Client-Klasse herauszuholen und in die Nachrichten zu schreiben. Ich würde eine Methode wie process () in die IMessage-Oberfläche einfügen und dann das nachrichtenspezifische Verhalten in jeden der konkreten Nachrichtentypen einfügen. Dies würde den Client einfacher machen, da er nur message.process () aufruft, anstatt Typen zu überprüfen. Das einzige Problem dabei ist jedoch, dass das in den Bedingungen enthaltene Verhalten mit Vorgängen für Daten in der Client-Klasse zu tun hat. Wenn ich also eine Prozessmethode in den konkreten Nachrichtenklassen implementieren würde, müsste ich sie dem Client übergeben, und ich weiß nicht, ob dies auch wirklich Sinn macht.

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
        }
}

Antworten auf die Frage(5)

Ihre Antwort auf die Frage