Ich habe eine Basisklasse:
class Message
Und zwei abgeleitete Klassen:
class SimpleMessage : Message
class ComplexMesssage : Message
Diese Typen werden in einem anderen Teil des Codes als solche verwendet:
void ProcessSimpleMessage(SimpleMessage m)
void ProcessComplexMessage(ComplexMessage m)
Diese Methoden befinden sich nicht innerhalb der Klasse Nachricht, da die Verarbeitung nicht Teil der Nachricht ist.
Nun möchte ich eine if/else/switch-Struktur vermeiden, da es viele Arten von Nachrichten gibt. Welches ist das beste Entwurfsmuster, das hier verwendet werden kann?
Eine Möglichkeit ist die Kapselung mit Hilfe des Strategiemusters (zumindest soweit ich es verstehe):
class ProcessableMessage
{
delegate void ProcessMessageDelegate(Message m)
private Message m;
private ProcessMessageDelegate ProcessMessage;
}
Aber ist es wirklich die beste Praxis, alle Verarbeitungsmethoden den Basistyp Message akzeptieren zu lassen und darin zu casten? Ein weiteres Problem wäre die Tatsache, dass der dynamische Typ der Nachricht (einfach oder komplex) in dieser Klasse an zwei Stellen gespeichert ist - in der Nachricht und im Verarbeitungsalgorithmus, was ziemlich hässlich aussieht.
Gibt es bessere Lösungen?
Danke!
Assaf