Strategie - UML diagram
Strategie - UML diagram

Návrhový vzor strategie (Strategy, Policy) slouží k vyměňování různých implementací algoritmu za běhu programu. Tato záměna může proběhnout buď explicitně (na žádost klienta) nebo implicitně (na základě nastavení ovladače).

Jádrem tohoto vzoru je třída Context, která slouží jako container na jednotlivé postupy. V momentě, kdy dojde k potřebě změny chování, Context prohodí objekty reprezentující dané algoritmy.


Příklad

Mějme pokladnu v baru, pokladna (odpovídá Contextu) umí některé operace, které budou vždy stejné – například vytisknout účtenku, ale zároveň se její chování musí měnit v průběhu času, protože bar pořádá tzv. „Happy hour“, kdy zákazníci mají slevu 10% na jednotlivé nápoje. Z tohoto důvodu je vhodné implementovat chování slev pomocí návrhového vzoru strategie. Tímto se zároveň zajistí snadné přidání dalších akcí do pokladního systému (na vysvědčení pivo pro premianty zdarma atp.).

Kód

/**
 * Demostrace navrhoveho vzoru Strategie
 * @author Pavel Micka
 */
public class StrategyDemonstration {
    public static void main(String[] args){
        CashDesk c = new CashDesk();
        c.setStrategy(new HappyHourStrategy());
        c.add(20);
        c.add(80);
        c.printBill();

        //Konec Happy Hour
        
        c.setStrategy(new NormalStrategy());
        c.add(20);
        c.add(80);
        c.printBill();
    }
}
/**
 * Pokladna (Context)
 * @author Pavel Micka
 */
class CashDesk{
    /**
     * Sem se uklada utrata
     */
    private List<Integer> drinks;
    private BillingStrategy strategy;

    public CashDesk() {
        this.drinks = new ArrayList<Integer>();
    }
    /**
     * Prida polozku na ucet
     * @param price cena polozky
     */
    public void add(int price){
        drinks.add(price);
    }
    /**
     * Vytiskne uctenku
     */
    public void printBill(){
        System.out.println("Celkem k zaplaceni: " + strategy.sum(drinks));
        System.out.println("Dekujeme za navstevu, vratte se znovu!");
        drinks.clear();
    }
    /**
     * Nastavi strategii
     * @param strategy strategie
     */
    public void setStrategy(BillingStrategy strategy) {
        this.strategy = strategy;
    }

}
/**
 * Uctovaci strategie
 * @author Pavel Micka
 */
interface BillingStrategy{
    /**
     * Vrati celkovou cenu vypitych napoju
     * @return celkova cena
     */
    public double sum(List<Integer> drinks);
}
/**
 * Bezna uctovaci strategie (bezne ceny)
 * @author Pavel Micka
 */
class NormalStrategy implements BillingStrategy{
    public double sum(List<Integer> drinks) {
        int sum = 0;
        for(Integer i : drinks){
            sum += i;
        }
        return sum;
    }
}
/**
 * Strategie pro Happy hour (sleva 10%)
 * @author Pavel Micka
 */
class HappyHourStrategy implements BillingStrategy{
    public double sum(List<Integer> drinks) {
        int sum = 0;
        for(Integer i : drinks){
            sum += i;
        }
        return sum*0.9;
    }
}

SEO od společnosti Digital Pylon


Online casino s algoritmem

České casino online online slot-vegas.cz

Hrajte nejlepší hry jako je GoodGame Empire.





Zajímavé články: Jak najít práci snů? Zvolte kariéru v IT!, Češi mají rádi hrací automaty online, Jak funguje algoritmické obchodování Casino, Online výuka Algoritmus a online marketing mají svá pravidla, Automaty, Matematický vliv, Ratings, Jak fungují algoritmy hazardních her online: více znalostí, více peněz, SYPWAI - nástroj pro vědecký vývoj, Vynikají na globálním trhu: Nejlepší vývojáři softwaru pro online výherní automaty, Jak si vybrat nejlepší české online casino, Proč byste měli hrát online casino VPN revoluce, Kde najdeme algoritmy v každodenním životě?, Čeká vás pracovní pohovor mimo město? Podívejte se, jak dokonale zvládnout včasný příchod, 5 úžasných technologií ze světa hazardních her, Mirror and access to Mostbet, Svou kancelář můžete mít stále po ruce, Jaké výhody má digitalizovaná firma oproti off-line konkurenci?, Jaký systém vybrat pro snadné řízení výroby?, Nahradí umělá inteligence ajťáky?, Důvody, proč používat SnapTik ke stahování videí TikTok, Dokonalý den na pláži: Co si vzít s sebou, aby byl výlet zábavný a bezpečný?, Jak přežít dlouhý let?, Go pay GoodGame Empire, Blockchain, Rozhovor