Wzorce behawioralne
Wzorce behawioralne dotyczą algorytmów i rozdzielania odpowiedzialności pomiędzy obiektami.
![Łańcuch zobowiązań](/images/patterns/cards/chain-of-responsibility-mini.png?id=36d85eba8d14986f053123de17aac7a7)
Pozwala przekazywać żądania według łańcucha obiektów obsługujących. Otrzymawszy żądanie, każdy z obiektów obsługujących decyduje o zrealizowaniu żądania lub przekazaniu go do swojego następnika w łańcuchu.
![Polecenie](/images/patterns/cards/command-mini.png?id=b149eda017c0583c1e92343b83cfb1eb)
Zmienia żądanie w samodzielny obiekt zawierający wszystkie informacje o tym żądaniu. Taka transformacja pozwala na parametryzowanie metod przy przy użyciu różnych żądań. Oprócz tego umożliwia opóźnianie lub kolejkowanie wykonywania żądań oraz pozwala na cofanie operacji.
![Iterator](/images/patterns/cards/iterator-mini.png?id=76c28bb48f997b36965983dd2b41f02e)
Pozwala przechodzić sekwencyjnie po elementach zbioru bez konieczności eksponowania jego formy (lista, stos, drzewo, itp.).
![Mediator](/images/patterns/cards/mediator-mini.png?id=a7e43ee8e17e4474737b1fcb3201d7ba)
Pozwala zredukować chaos zależności pomiędzy obiektami. Wzorzec ogranicza bezpośrednią komunikację pomiędzy obiektami i zmusza je do współpracy wyłącznie za pośrednictwem obiektu mediatora.
![Pamiątka](/images/patterns/cards/memento-mini.png?id=8b2ea4dc2c5d15775a654808cc9de099)
Pozwala zapisywać i przywracać wcześniejszy stan obiektu bez ujawniania szczegółów jego implementacji.
![Obserwator](/images/patterns/cards/observer-mini.png?id=fd2081ab1cff29c60b499bcf6a62786a)
Pozwala zdefiniować mechanizm subskrypcji by powiadamiać wiele obiektów o zdarzeniach odbywających się w obserwowanym obiekcie.
![Stan](/images/patterns/cards/state-mini.png?id=f4018837e0641d1dade756b6678fd4ee)
Pozwala obiektowi zmienić swoje zachowanie gdy zmieni się jego wewnętrzny stan. Wygląda to tak, jakby obiekt zmienił swoją klasę.
![Strategia](/images/patterns/cards/strategy-mini.png?id=d38abee4fb6f2aed909d262bdadca936)
Pozwala zdefiniować rodzinę algorytmów, umieścić je w osobnych klasach i uczynić obiekty tych klas wymienialnymi.
![Metoda szablonowa](/images/patterns/cards/template-method-mini.png?id=9f200248d88026d8e79d0f3dae411ab4)
Definiuje szkielet algorytmu w klasie bazowej, ale umożliwia podklasom nadpisanie poszczególnych etapów algorytmu bez konieczności zmiany jego struktury.
![Odwiedzający](/images/patterns/cards/visitor-mini.png?id=854a35a62963bec1d75eab996918989b)
Pozwala oddzielić algorytmy od obiektów na których pracują.