Zuständigkeitskette
Die Zuständigkeitskette (englisch
) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster. Es gehört zur Kategorie der Verhaltensmuster (englisch
) und wird für Algorithmen verwendet. Dabei dient es der Entkopplung des Auslösers einer Anfrage mit seinem Empfänger.[1] Das Muster ist eines der sogenannten GoF-Muster (siehe Viererbande,
).
Verwendung
Mehrere Objekte werden hintereinander geschaltet (miteinander verkettet), um gemeinsam eine eingehende Anfrage bearbeiten zu können. Diese Anfrage wird an der Kette entlang geleitet, bis eines der Objekte die Anfrage beantworten kann. Der Klient, von dem die Anfrage ausgeht, hat dabei keine Kenntnis darüber, von welchem Objekt die Anfrage beantwortet werden wird.
UML-Diagramm
Akteure
Bei einer Zuständigkeitskette spielen drei Akteure eine Rolle:
- Bearbeiter, der ein Interface für die Anfragen definiert
- konkreter Bearbeiter, der alle Anfragen bearbeitet, für die er selbst zuständig ist und alle anderen Anfragen an das nächste Kettenglied (den nächsten Bearbeiter) weiterleitet
- Klient, der die Anfrage an irgendeinem konkreten Bearbeiter initiiert.
Vor- und Nachteile
Ein Vorteil ist, dass der Klient den tatsächlich zuständigen Bearbeiter nicht kennen muss. Selbst die Kettenglieder müssen nur ihren direkten Nachfolger und nicht den Gesamt-Aufbau der Kette kennen. Dies führt zu einer geringeren Kopplung. Außerdem kann die Zuständigkeit von Objekten für bestimmte Anfragen verändert werden, ohne dass potenzielle Klienten davon in Kenntnis gesetzt werden müssen.
Es gibt auf der anderen Seite keine Garantie, dass die Anfrage tatsächlich bearbeitet wird. Wenn das letzte Glied der Kette eine Anfrage erhält, für die es ebenfalls nicht zuständig ist, wird die Anfrage nach obigem Muster verworfen. Dies muss durch eine entsprechende Fallbehandlung abgefangen werden.
Es muss sichergestellt werden, dass jeder Bearbeiter in der Kette nur einmal vorkommt, sonst entstehen Kreise und das Programm bleibt in einer Endlosschleife hängen.
Verwandte Entwurfsmuster
Ein verwandtes Entwurfsmuster ist der Decorator: Vor oder nachdem eine Anfrage weitergeleitet wird, können zusätzliche Operationen erfolgen, wie zum Beispiel Gültigkeitsprüfungen. Außerdem ähnlich ist das Kompositum. Dabei wird die Anfrage so lange vom Child zum Parent weitergereicht, bis sie beantwortet wird oder kein weiteres Objekt folgt. Eine weitere Möglichkeit ergibt sich durch einen Iterator über Objekte mit Schablonenmethoden.
Einzelnachweise
- ↑ Erich Gamma, Richard Helm, Ralph Johnson, John Vlissides: Entwurfsmuster. 5. Auflage. Addison-Wesley, 1996, ISBN 3-8273-1862-9, S. 410.