Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Pouze tento týden sleva až 80 % na e-learning týkající se Swiftu. Zároveň využij výhodnou slevovou akci až 30 % zdarma při nákupu e-learningu - více informací.
swift week + discount 30

Lekce 13 - Strategy (strategie)

V minulé lekci, Observer (pozorovatel), jsme se podívali na návrhový vzor chování Observer, který umožňuje objektu spravovat řadu pozorovatelů, kteří reagují na změnu jeho stavu voláním svých metod.

Návrhový vzor strategie umožňuje za běhu aplikace vyměnit algoritmus za jiný bez nutnosti změny kódu programu. Algoritmy jsou přehledně zabalené jako moduly. Jde o další návrhový vzor chování skupiny GoF.

Motivace

V aplikacích často používáme naše algoritmy, může se jednat o způsob výpočtu slevy v internetovém obchodě, způsob výpočtu daně, způsob uložení dat, způsob validace dat a podobně. Algoritmů pro stejnou věc může být více a to z důvodu kompatibility se staršími daty nebo jednoduše proto, že algoritmus závisí na konkrétní situaci.

Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!

Pokud bychom chtěli za běhu vyměnit algoritmus, budeme muset bez znalosti Strategy nebo podobného vzoru implementovat switch či podobné větvení. To může být s narůstajícím počtem algoritmů nepřehledné a každý nový algoritmus vyžaduje zásah do zdrojového kódu.

Občas bychom rádi, aby byl algoritmus jakýmsi zapouzdřeným modulem, který lze jednoduše vyměnit za jiný, aniž by si toho klient všiml. Se vzorem Strategy můžeme takovou změnu udělat dokonce i za běhu aplikace.

Vzor

Strategy (strategie) je tvořen abstraktní třídou Strategy, která definuje rozhraní pro celou rodinu algoritmů, které představují konkrétní strategie. Namísto abstraktní třídy se může jednat i o interface. Jednotlivé algoritmy z ni poté dědí a toto rozhraní implementují svou logikou.

Návrhový vzor Strategy/Strategie

Instance algoritmu je vložena do Kontextu často v konstruktoru, aby byl úplně odstíněn od jejího výběru.

Vzor Strategy je podobný, jako vzor Bridge, nicméně je určený pro chování, nikoli strukturu.

V další lekci, Template Method (šablonová metoda), si ukážeme návrhový vzor chování Template Method, který definuje kostru algoritmu, tedy jeho jednotlivé kroky. Potomci poté kroky implementují a představují zaměnitelné algoritmy.


 

Předchozí článek
Observer (pozorovatel)
Všechny články v sekci
Návrhové vzory GoF
Přeskočit článek
(nedoporučujeme)
Template Method (šablonová metoda)
Článek pro vás napsal David Čápka
Avatar
Uživatelské hodnocení:
6 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 13 let. Má rád Nirvanu, sushi a svobodu podnikání.
Unicorn university David se informační technologie naučil na Unicorn University - prestižní soukromé vysoké škole IT a ekonomie.
Aktivity

 

 

Komentáře

Avatar
Kit
Tvůrce
Avatar
Kit:28.8.2012 12:13

Schéma je sice hezké, ale ocenil bych i ukázku konkrétní implementace v nějakém jazyku. Aby to posloužilo i k výuce návrhového vzoru, protože v této podobě to většině programátorů nic neřekne.

Odpovědět
28.8.2012 12:13
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:28.8.2012 12:23

Já myslím, že jim to řekne to samé, class diagram je přeci 1:1 s kódem. Pokud někdo neumí základní UML notaci, pak je to začátečník a ten nepotřebuje návrhové vzory.

Ukázky kódu doplním v druhé vlně.

Odpovědět
28.8.2012 12:23
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka
Kit:28.8.2012 12:53

Je rozdíl, jestli děláš encyklopedii nebo tutoriál. V tutoriálu by mělo být dodrženo základní pravidlo výuky: Od konkrétního k abstraktnímu. Tedy nejprve napsat problém, potom konkrétní program, který ho řeší a nakonec zobecněné schéma. Ten prostředek jsi přeskočil tak, jak se to s oblibou dělává na VŠ přednáškách.

Ještě jsem nenašel žádný rozumně udělaný tutoriál na výuku UML. A knihy na tom nejsou o mnoho lépe.

Odpovědět
28.8.2012 12:53
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:28.8.2012 12:57

UML je na cestě, jsou hotové 3 díly, ale stále se nějak zasekává. Skoro to vypadá, že se toho zase budu muset chopit sám. Nicméně tu bude, proto jsem vytvořil tu kategorii návrh.

Dělám encyklopedii vzorů. Vždy uvedu motivaci, kde je problém, který vzor řeší. Poté uvedu abstraktní vzor. Poté uvedu konkrétní příklad s kódem. Poslední krok zde bude až v 2. vlně, protože ho vnímám jako druhořadý.

Odpovědět
28.8.2012 12:57
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Tento výukový obsah pomáhají rozvíjet následující firmy, které dost možná hledají právě tebe!
Avatar
Kit
Tvůrce
Avatar
Odpovídá na David Čápka
Kit:28.8.2012 13:11

Pokud to děláš jako encyklopedii, tak je to v pořádku. Jen to není tak názorné jako tutoriál.

V každé významnější práci jsou druhořadé záležitosti vždy uprostřed. Vše podstatné je v úvodu nebo v závěru.

Odpovědět
28.8.2012 13:11
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
David Čápka
Tým ITnetwork
Avatar
Odpovídá na Kit
David Čápka:28.8.2012 14:10

V tom případě tam bude motivace a praktický příklad, abstrakce bude uprostřed.

Ctím inkrementální (iterativní) přístup, proto příklady zatím píši jen do textu a jako zdrojový kód je uvedu v další vlně. Raději se nyní probojuji dalšími vzory, docela mě to baví :)

Odpovědět
28.8.2012 14:10
One of the most common causes of failure is the habit of quitting when one is overtaken by temporary defeat.
Avatar
Ondřej Krsička:28.9.2016 20:28

Už jsem to párkrát použil. Až teď ale vím, že se to jmenuje Strategy :D

 
Odpovědět
28.9.2016 20:28
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 7 zpráv z 7.