Strategy (stratégia)
Návrhový vzor stratégia umožňuje za behu vymeniť za behu aplikácie algoritmus za iný bez nutnosti zmeny kódu programu. Algoritmy sú prehľadne zabalené ako moduly.
Motivácia
V aplikáciách často používame naše algoritmy, môže sa jednať o spôsob výpočtu zľavy v internetovom obchode, spôsob výpočtu dane, spôsob uloženia dát, spôsob validácie dát a podobne. Algoritmov pre rovnakú vec môže byť viac a to z dôvodu kompatibility so staršími dátami alebo jednoducho preto, že algoritmus závisí od konkrétnej situácie.
Ak by sme chceli za behu vymeniť algoritmus, budeme musieť bez znalosti
Strategy alebo podobného vzoru implementovať switch
či podobné
vetvenia. To môže byť s narastajúcim počtom algoritmov neprehľadné a
každý nový algoritmus vyžaduje zásah do zdrojového kódu.
Občas by sme radi, aby bol algoritmus akýmsi zapuzdreným modulom, ktorý možno jednoducho vymeniť za iný, bez toho aby si toho klient všimol. So vzorom Strategy môžeme takúto zmenu urobiť dokonca aj za behu aplikácie.
Vzor
Strategy (stratégia) je tvorený abstraktné triedou Strategy
,
ktorá definuje rozhranie pre celú rodinu algoritmov, ktoré predstavujú
konkrétne stratégie. Namiesto abstraktné triedy sa môže jednať aj o
interface. Jednotlivé algoritmy z nej potom dedia a toto rozhranie
implementujú svoju logikou.
Inštancia algoritmu je vložená do Kontextu
často v
konstruktoru, aby bol úplne odtienený od jej výberu.
Vzor Strategy je podobný, ako vzor Bridge, avšak je určený pre správanie, nie štruktúru.