Ich habe die folgende Situation, in der eine Client-Klasse unterschiedliche Verhalten auf der Grundlage der Art der Nachricht führt, die es empfängt. Ich frage mich, ob es eine bessere Möglichkeit gibt, dies zu tun, da ich die instanceof- und die if-Anweisungen nicht mag.Vermeidung von instanceof beim Überprüfen eines Nachrichtentyps
Eine Sache, die ich mir vorgenommen habe, war, die Methoden aus der Clientklasse herauszuziehen und sie in die Nachrichten einzufügen. Ich würde eine Methode wie process() in die IMessage-Schnittstelle einfügen und dann das nachrichtenspezifische Verhalten in jeden der konkreten Nachrichtentypen einfügen. Dies würde den Client einfach machen, da er nur message.process() aufrufen würde, anstatt Typen zu prüfen. Das einzige Problem dabei ist jedoch, dass das in den Bedingungen enthaltene Verhalten mit Operationen auf Daten in der Klasse Client 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 das auch wirklich Sinn macht.
Basierend auf der Tatsache, dass Sie JMS verwenden, was ist IMessage? JMS verfügt über vordefinierte Nachrichtentypen, sodass Sie keine eigenen Nachrichtentypen definieren können, es sei denn, Sie verfügen über einen Intermediär, der sie konvertiert. Dies ist jedoch nur ein kleiner Fehler, es sei denn, Sie versuchen, JMS zu abstrahieren. – Robin