Strategy (strategie)

Návrhové vzory Strategy (strategie)

ONEbit hosting Unicorn College Tento obsah je dostupný zdarma v rámci projektu IT lidem. Vydávání, hosting a aktualizace umožňují jeho sponzoři.

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

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.

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 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.


 

  Aktivity (2)

Článek pro vás napsal David Čápka
Avatar
Autor pracuje jako softwarový architekt a pedagog na projektu ITnetwork.cz (a jeho zahraničních verzích). Velmi si váží svobody podnikání v naší zemi a věří, že když se člověk neštítí práce, tak dokáže úplně cokoli.
Unicorn College Autor se informační technologie naučil na Unicorn College - prestižní soukromé vysoké škole IT a ekonomie.

Jak se ti líbí článek?
Celkem (2 hlasů) :
4.54.54.54.54.5


 


Miniatura
Předchozí článek
Observer (pozorovatel)
Miniatura
Všechny články v sekci
Návrhové vzory
Miniatura
Následující článek
Template Method (šablonová metoda)

 

 

Komentáře

Avatar
Kit
Redaktor
Avatar
Kit:

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  +3 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:

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  -2 28.8.2012 12:23
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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  +1 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:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Kit
Redaktor
Avatar
Odpovídá na David Čápka
Kit:

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:

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
Miluji svou práci a zdejší komunitu, baví mě se rozvíjet, děkuji každému členovi za to, že zde působí.
Avatar
Ondřej Krsička
Redaktor
Avatar
Ondřej Krsička:

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.