Java programátor expert
Návrhové vzory Java (design patterns): Strategy
Dnes sa pozrieme na posledný návrhový vzor Strategy (java design patterns) z kategórie vzorov správania (behavioral patterns). Návrhové vzory v tejto kategórii sa zaoberajú komunikáciou (interaction) medzi objektami a ich zodpovednosťou (responsibility).
Čo je návrhový vzor Strategy?
Strategy je návrhový vzor, ktorý umožňuje meniť správanie triedy, resp. jej algoritmy dynamicky podľa potreby za behu programu. Ak napr. máme triedu, ktorá vykonáva validáciu dát, ich štruktúra nemusí byť pred spustením známa a o tom, ktorý validačný algoritmus sa použije sa rozhodne až bezprostredne pred ich použitím.
Aký problém návrhový vzor Strategy rieši?
Vzor Strategy (Stratégia) rieši problém, keď potrebujeme flexibilne meniť spôsob implementácie určitej funkcionality za behu programu. Umožňuje definovať rodinu algoritmov alebo stratégií, umiestniť každú z nich do samostatnej triedy a zabezpečiť, aby boli ich objekty vzájomne zameniteľné.
Hlavným cieľom je poskytnúť možnosť dynamicky meniť správanie objektu podľa zvolenej stratégie. Na prepínanie stratégií sa používa kontextový objekt, ktorý má referenciu na objekt stratégie a môže volať aj jej metódy.
Príklad Strategy implementácie v Jave
Tento kód demonštruje použitie návrhového vzoru Strategy v kontexte hokejového trénera (Coach) a jeho schopnosti meniť hru medzi útočnou a obrannou stratégiou na základe aktuálneho stavu zápasu.
HernaStrategia.java
package designpatterns;
public interface HernaStrategia {
void vykonat();
}
HernaStrategia je rozhranie, ktoré definuje spôsob, ako môže byť stratégia implementovaná. Obsahuje jedinú metódu vykonat(), ktorá definuje spôsob vykonania stratégie.
UtocnaStrategia.java, ObrannaStrategia.java
package designpatterns;
public class UtocnaStrategia implements HernaStrategia {
@Override
public void vykonat() {
System.out.println("Tím hrá v útočnej formácii.");
}
}
public class ObrannaStrategia implements HernaStrategia {
@Override
public void vykonat() {
System.out.println("Tím prechádza do obrannej formácie.");
}
}
UtocnaStrategia a ObrannaStrategia sú konkrétne implementácie rozhrania HernaStrategia. Každá z týchto tried implementuje metódu vykonat() tak, aby vykonala konkrétnu stratégiu – útočnú resp. obrannú.
Coach.java
package designpatterns;
// Kontext
public class Coach {
private HernaStrategia hernaStrategia;
public void zmenitStrategiu(HernaStrategia novaStrategia) {
this.hernaStrategia = novaStrategia;
}
public void vykonatStrategiu() {
hernaStrategia.vykonat();
}
}
Coach je kontext, ktorý používa stratégiu. Má atribút hernaStrategia, ktorý drží aktuálnu stratégiu. Metóda zmenitStrategiu() slúži na zmenu aktuálnej stratégie a metóda vykonatStrategiu() ju vykonáva.
Main.java
import designpatterns.Coach;
import designpatterns.HernaStrategia;
import designpatterns.ObrannaStrategia;
import designpatterns.UtocnaStrategia;
public class Main {
public static void main(String[] args) {
Coach coach = new Coach();
HernaStrategia utocnaStrategia = new UtocnaStrategia();
HernaStrategia obrannaStrategia = new ObrannaStrategia();
System.out.println("Začala sa hra.");
// Coach vyberá stratégiu podľa priebehu hry
// Začíname s útočnou stratégiou
coach.zmenitStrategiu(utocnaStrategia);
coach.vykonatStrategiu();
System.out.println("Tím striela gól a vedie.");
// Ak tím vyhráva, zmeníme na obrannú stratégiu
// (simulujeme, že sa tím dostáva do obrannej fázy, keď vedie v zápase)
coach.zmenitStrategiu(obrannaStrategia);
coach.vykonatStrategiu();
System.out.println("Súper striela gól a vyrovnáva.");
// Ak tím prehráva, môžeme sa opäť vrátiť k útočnej stratégii
// (simulujeme, že tím znova prechádza do útočnej fázy, keď prehráva)
coach.zmenitStrategiu(utocnaStrategia);
coach.vykonatStrategiu();
}
}
V triede Main sa vytvára inštancia Coach a dve inštancie stratégií – útočnej a obrannej. Nasleduje simulácia hry, kde sa menia stratégie podľa priebehu zápasu.
Výstup z tohto príkladu je:
Zhrnutie
Vzor Strategy sa často používa, keď potrebujeme meniť správanie triedy, resp. jej stratégie dynamicky podľa potreby za behu programu.
Pripravili sme pre teba súbory so spomínaným príkladom vo forme kódu, ktorý si môžeš spustiť priamo v Jave. Stiahni si kód Java Strategy tu.
Ak hľadáš prácu a si Java programátor, prezri si naše benefity pre zamestnancov a reaguj na najnovšie ponuky práce.