Zuständigkeitskette
aus Wikipedia, der freien Enzyklopädie
Die Zuständigkeitskette (engl. Chain of Responsibility) ist ein in der Softwareentwicklung eingesetztes Entwurfsmuster und wird für Algorithmen verwendet. Es gehört zur Kategorie der Verhaltensmuster (Behavorial Patterns). Das Muster ist eines der sogenannten GoF-Muster (siehe Viererbande, Gang of Four).
Inhaltsverzeichnis |
[Bearbeiten] Verwendung
Es werden Objekte verkettet, um gemeinsam eine eingehende Anfrage bedienen zu können. Eine 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.
[Bearbeiten] UML-Diagramm
[Bearbeiten] Akteure
- Bearbeiter: Definiert ein Interface für die Anfragen.
- KonkreterBearbeiter: Bearbeitet alle Anfragen, für die er selbst zuständig ist und leitet alle anderen an das nächste Kettenglied (den nächsten Bearbeiter) weiter.
- Klient: Initiiert die Anfrage an irgendeinem Objekt vom Typ KonreterBearbeiter.
[Bearbeiten] Vorteile
- Der Klient muss den tatsächlich zuständigen Bearbeiter nicht kennen. Selbst die Kettenglieder müssen nur ihren direkten Nachfolger und nicht den Gesamt-Aufbau der Kette kennen. Dies führt zu einer geringeren Kopplung (Softwareentwicklung).
- Die Zuständigkeit von Objekten für bestimmte Anfragen kann verändert werden, ohne dass potentielle Klienten davon in Kenntnis gesetzt werden müssen.
[Bearbeiten] Nachteile
- Es gibt 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 Pattern verworfen. Dies muss durch entsprechende Design-Überlegungen (Ausnahmebehandlung) verhindert werden.
[Bearbeiten] Verwandte Entwurfsmuster
- Dekorierer: Vor oder nach der Weiterleitung einer Anfrage können zusätzliche Operationen erfolgen, wie zum Beispiel Gültigkeitsprüfungen.
- Kompositum: Hier wird die Anfrage so lange vom Child zum Parent weitergereicht, bis sie beantwortet wird oder kein weiteres Objekt folgt.