behavioral pattern
Főnév
behavioral pattern (tsz. behavioral patterns)
A behavioral design patterns (viselkedési tervezési minták) célja, hogy az objektumok közötti kommunikációt, együttműködést és felelősségelosztást szabályozzák. Ezek a minták nem az objektumok szerkezetét változtatják meg, hanem azt, hogyan viselkednek, hogyan válaszolnak eseményekre, hogyan hívják egymás metódusait, és hogyan kezdenek adatokat egymás között.
🎭 A 11 klasszikus viselkedési minta a GoF (Gang of Four) szerint:
| Minta | Célja |
|---|---|
| Observer | Eseményfigyelők automatikus értesítése |
| Strategy | Algoritmus dinamikus cseréje |
| Command | Művelet objektummá alakítása, futás elhalasztása |
| State | Objektum viselkedése az állapotától függ |
| Template Method | Algoritmus váza az alosztályokra bízott lépésekkel |
| Chain of Responsibility | Egymás után kipróbált handler objektumok |
| Mediator | Kommunikáció központosítása |
| Memento | Objektum állapotának mentése és visszaállítása |
| Interpreter | Nyelvtan értelmezése, kifejezések kiértékelése |
| Iterator | Kollekció bejárása absztrakt módon |
| Visitor | Művelet hozzáadása osztály módosítása nélkül |
🔍 Részletes példák
1. Observer – “Megfigyelő”
Cél: Több objektum (megfigyelő) automatikusan értesüljön egy másik objektum állapotváltozásáról.
class Observer {
public:
virtual void update(int value) = 0;
};
class Subject {
std::vector<Observer*> observers;
int state = 0;
public:
void attach(Observer* obs) { observers.push_back(obs); }
void setState(int s) {
state = s;
for (auto o : observers) o->update(state);
}
};
2. Strategy – “Stratégia”
Cél: Algoritmusok cserélhetők futásidőben egy interfészen keresztül.
class Strategy {
public:
virtual void execute() = 0;
};
class ConcreteStrategyA : public Strategy {
public:
void execute() override { std::cout << "A stratégia\n"; }
};
class Context {
Strategy* strategy;
public:
Context(Strategy* s) : strategy(s) {}
void run() { strategy->execute(); }
};
3. Command – “Parancs”
Cél: Művelet reprezentálása objektumként. Támogatja a tárolást, visszavonást, sorba állítást.
class Command {
public:
virtual void execute() = 0;
};
class Light {
public:
void on() { std::cout << "Lámpa bekapcsolva\n"; }
};
class LightOnCommand : public Command {
Light* light;
public:
LightOnCommand(Light* l) : light(l) {}
void execute() override { light->on(); }
};
4. State – “Állapot”
Cél: Objektum viselkedésének megváltoztatása az aktuális állapottól függően.
class State {
public:
virtual void handle() = 0;
};
class Context {
State* state;
public:
void setState(State* s) { state = s; }
void request() { state->handle(); }
};
5. Template Method – “Sablonmódszer”
Cél: Algoritmus váza az ősosztályban, egyes lépések az alosztályban valósulnak meg.
class Game {
public:
void play() {
start();
playTurn();
end();
}
virtual void start() = 0;
virtual void playTurn() = 0;
virtual void end() = 0;
};
📦 A többi minta röviden
- Chain of Responsibility: Több handler láncolva, amelyik tudja kezelni, megteszi.
- Mediator: Egy központi objektum kezeli az objektumok közötti kommunikációt (pl. chat rendszer).
- Memento: Állapotmentés és visszaállítás anélkül, hogy feltörnénk az objektumot.
- Interpreter: Saját kis nyelv (DSL) értelmezése (pl. számológép kifejezések).
- Iterator: Kollékció absztrakt módon való bejárása.
- Visitor: Új művelet végrehajtása osztály módosítása nélkül.
🧠 Mikor használd őket?
| Helyzet | Minta |
|---|---|
| Több objektum reagál egy eseményre | Observer |
| Különböző viselkedések futásidőben válthatók | Strategy |
| El akarod menteni és visszaállítani egy objektum állapotát | Memento |
| El akarod kerülni, hogy objektumok közvetlenül kommunikáljanak | Mediator |
| Parancsokat szeretnél tárolni és végrehajtani később | Command |
✅ Összefoglalás
- A behavioral minták azt szabályozzák, hogyan együttműködnek az objektumok.
- Segítenek elválasztani a viselkedést a struktúrától.
- Fontosak az eseménykezelésben, állapotfüggő logikában, algoritmus lecserélhetőségében.
- behavioral pattern - Szótár.net (en-hu)
- behavioral pattern - Sztaki (en-hu)
- behavioral pattern - Merriam–Webster
- behavioral pattern - Cambridge
- behavioral pattern - WordNet
- behavioral pattern - Яндекс (en-ru)
- behavioral pattern - Google (en-hu)
- behavioral pattern - Wikidata
- behavioral pattern - Wikipédia (angol)