Łańcuch zobowiązań to behawioralny wzorzec projektowy pozwalający przekazywać żądanie wzdłuż łańcucha potencjalnych obiektów obsługujących aż zostanie obsłużone.
W łańcuchu zobowiązań wiele obiektów może obsłużyć żądanie bez konieczności sprzęgania klas wysyłających je z konkretnymi klasami odbierającymi. Łańcuch można układać dynamicznie w trakcie działania programu z dowolnych obiektów obsługujących, wyposażonych w standardowy interfejs obsługi żądań.
Popatrzmy na wzorzec Łańcuch Zobowiązań przez pryzmat przykładu opartego na aplikacji do obsługi szpitala. Szpital może mieć wiele oddziałów:
Recepcja
Lekarz
Gabinet zabiegowy
Kasa
Każdy nowy pacjent najpierw jest przyjmowany w Recepcji, następnie przez Lekarza, potem udaje się do Gabinetu Zabiegowego, a na końcu do Kasy (i tak dalej). Pacjent pokonuje więc pewien łańcuch oddziałów, gdzie każdy z nich kieruje go dalej po wypełnieniu swojej funkcji.
Wzorzec można zastosować gdy mamy do czynienia z wieloma kandydatami do przetworzenia tego samego żądania oraz gdy nie chcemy, aby klient wybierał odbiorcę samodzielnie, gdyż wiele obiektów może obsłużyć jego żądanie. Dzięki temu unikamy też sprzężenia klienta z odbiorcami. Klient musi wiedzieć tylko o pierwszym ogniwie łańcucha.
Jak w przykładzie ze szpitalem, pacjent najpierw kieruje się do recepcji. Następnie, na podstawie określonego stanu pacjenta jest wysyłany do stosownego obsługującego w łańcuchu.