Behavioral Patterns
A viselkedési minták az objektumok közötti felelősségmegosztással és kommunikációval foglalkoznak. Céljuk, hogy a logika lazán csatolt és cserélhető legyen.
Tartalomjegyzék
- Chain of Responsibility – láncba kötött feldolgozók közül az dönti el a kérést, aki "magára ismer".
- Command – a műveletet objektumba zárjuk, így tárolható, sorba tehető és visszacsinálható (undo).
- Iterator – egységes módon járjunk végig egy gyűjteményen, függetlenül annak belső szerkezetétől.
- Observer – egy "subject" automatikusan értesíti a feliratkozott megfigyelőket.
- State – az objektum viselkedése belső állapotától függ, minden állapot külön osztály.
- Strategy – algoritmusok cserélhető családja, amit futásidőben be lehet állítani.
- Template Method – az algoritmus váza fix az ősosztályban, csak a lépések részleteit írják felül az alosztályok.
Observer vs. Strategy
flowchart LR
subgraph Observer
S[Subject] -->|notify| O1[Observer 1]
S -->|notify| O2[Observer 2]
end
subgraph Strategy
C[Context] -->|delegál| St[Strategy interface]
St --> A[Algoritmus A]
St --> B[Algoritmus B]
end A Observer eseményalapú: 1 → N kapcsolat van, és a Subject nem tudja előre, hány figyelő van. A Strategy behelyettesíthető viselkedés: 1 → 1 kapcsolat van adott pillanatban, de a stratégia futás közben cserélhető.
State vs. Strategy
A kettő szerkezete majdnem azonos (mindkettő interfész mögé delegál), de a szándék más:
| Szempont | State | Strategy |
|---|---|---|
| Ki dönt a váltásról? | Maga az állapot, belülről | A kliens, kívülről |
| Mit modellezünk? | Az objektum életciklusát (állapotgép) | Algoritmusok cserélhető családját |
| Tipikus eset | Csomag státusza, kapcsolat élete, rendelés folyamata | Fizetési mód, tömörítés, útvonaltervezés |
Template Method vs. Strategy
A Template Method öröklés alapú: az algoritmus váza fix, a lépéseket az alosztály fordítási időben dönti el. A Strategy kompozíció alapú: a teljes algoritmus futásidőben cserélhető.