strategy pattern
Megjelenés
Főnév
strategy pattern (tsz. strategy patterns)
- (informatika) A Strategy pattern (stratégia minta) egy viselkedési tervezési minta, amely lehetővé teszi, hogy egy algoritmuscsaládot definiáljunk, az algoritmusokat egymással felcserélhető objektumokba csomagoljuk, és azok használatát a kliensosztályból delegáljuk. A minta célja a rugalmasság és a nyitott/zárt elv (OCP) betartása.
🧠 Miért hasznos?
A Strategy minta akkor hasznos, ha:
- Többféle algoritmus (stratégia) létezik egy művelethez.
- Ezek között futásidőben szeretnél váltani.
- Nem akarsz
if-elsevagyswitch-caseszerkezeteket használni az algoritmus kiválasztására. - A viselkedést a kontextustól (azaz a stratégiát használó objektumtól) függetleníteni akarod.
🎯 Cél
- Az algoritmusok legyenek felcserélhetők.
- A kliens ne ismerje az algoritmus részleteit.
- Karbantarthatóbb, bővíthetőbb kód.
🧱 Alapstruktúra
// Stratégia interfész
class Strategy {
public:
virtual void execute() const = 0;
virtual ~Strategy() {}
};
// Konkrét stratégia 1
class ConcreteStrategyA : public Strategy {
public:
void execute() const override {
std::cout << "Stratégia A végrehajtása\n";
}
};
// Konkrét stratégia 2
class ConcreteStrategyB : public Strategy {
public:
void execute() const override {
std::cout << "Stratégia B végrehajtása\n";
}
};
// Kontextus
class Context {
private:
Strategy* strategy;
public:
Context(Strategy* s) : strategy(s) {}
void setStrategy(Strategy* s) {
strategy = s;
}
void run() const {
strategy->execute();
}
};
🔧 Használat
int main() {
ConcreteStrategyA stratA;
ConcreteStrategyB stratB;
Context context(&stratA);
context.run(); // Stratégia A
context.setStrategy(&stratB);
context.run(); // Stratégia B
return 0;
}
✅ Előnyök
- Az algoritmusok függetlenek a használó osztálytól.
- Könnyen bővíthető: új algoritmus csak új osztály.
- Csökkenti az
if-eket,switch-eket → tiszta kód. - Egységtesztelhető: a stratégiák külön-külön.
❌ Hátrányok
- Sok külön osztályt igényel (egy stratégia = egy osztály).
- Növeli az absztrakciós szintet → komplexebb a kód.
- A kliensnek tudnia kell választani stratégiát (vagy egy Factory-ra bízni).
🧪 Használati példák
- Rendezés különböző algoritmusokkal
- Fizetési módok egy webáruházban: PayPal, bankkártya, kripto
- Játékbeli viselkedések: különböző AI taktikák
- Különböző tömörítési módszerek: ZIP, RAR, LZMA
🆚 Strategy vs State minta
| Jellemző | Strategy pattern | State pattern |
|---|---|---|
| Cél | Algoritmusok cserélhetősége | Állapot szerinti viselkedés változtatása |
| Klienstől függ | Kliensem választja | Objektum önállóan vált stratégiát |
| Objektum szerepe | Algoritmust kiválaszt | Belső állapot szerint működik |
🧩 Kombinálható minták
- Factory + Strategy – futásidőben példányosítjuk a megfelelő stratégiát
- Decorator + Strategy – stratégia viselkedését dinamikusan bővíthetjük
- Observer + Strategy – eseményre reagáló stratégia váltás
📌 TL;DR
- A Strategy pattern segít algoritmusokat leválasztani a kliensekről.
- Javítja a bővíthetőséget és tesztelhetőséget.
- Tipikus alkalmazási terület: fizetési módok, játék AI, adatfeldolgozási módok.
- strategy pattern - Szótár.net (en-hu)
- strategy pattern - Sztaki (en-hu)
- strategy pattern - Merriam–Webster
- strategy pattern - Cambridge
- strategy pattern - WordNet
- strategy pattern - Яндекс (en-ru)
- strategy pattern - Google (en-hu)
- strategy pattern - Wikidata
- strategy pattern - Wikipédia (angol)