Chain-of-Responsibility-Muster
Kurz: Eine Anfrage wandert durch eine Kette von Bearbeitern. Jeder entscheidet: selbst erledigen, ablehnen oder an den nächsten weitergeben. Sender und Empfänger kennen sich nicht.
Beispiel: Prüfungen bei einer Bestellung
class Pruefer:
def __init__(self, naechster=None):
self.naechster = naechster
def pruefen(self, bestellung):
fehler = self.eigene_pruefung(bestellung)
if fehler:
return fehler
return self.naechster.pruefen(bestellung) if self.naechster else None
class Lager(Pruefer):
def eigene_pruefung(self, b):
return None if b["menge"] <= 5 else "nicht genug im Lager"
class Zahlung(Pruefer):
def eigene_pruefung(self, b):
return None if b["bezahlt"] else "nicht bezahlt"
kette = Lager(Zahlung())
print(kette.pruefen({"menge": 2, "bezahlt": False})) # nicht bezahltWo man es täglich sieht
- Middleware in Webframeworks: Eine Anfrage läuft durch Anmeldung → Protokollierung → Ratenbegrenzung → eigentliche Funktion. Jede Stufe kann abbrechen.
- Ereignisweitergabe in Oberflächen: Ein Klick wird an das Elternelement durchgereicht.
- Support-Stufen: Level 1, 2, 3.
Vor- und Nachteile
- Stufen sind klein, einzeln testbar und frei kombinierbar (SRP, OCP). − Wenn niemand zuständig ist, geht die Anfrage verloren. Und die Fehlersuche durch die Kette kann mühsam sein.
Siehe auch: Observer-Muster, Decorator-Muster