IT rekvalifikace s garancí práce. Seniorní programátoři vydělávají až 160 000 Kč/měsíc a rekvalifikace je prvním krokem. Zjisti, jak na to!
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í.

Lekce 14 - Template Method (šablonová metoda)

V minulé lekci, Strategy (strategie), jsme si probrali návrhový vzor Strategy, který umožňuje za běhu aplikace vyměnit algoritmus za jiný bez nutnosti změny kódu programu.

V dnešním tutoriálu Návrhové vzory GoF si představíme 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.

Motivace použití vzoru Template Method

V naší aplikaci se může objevit několik algoritmů se stejnou strukturou, ale jiným chováním. Jako příklad se často uvádí uložení dokumentu do souboru určitého formátu. Zapisovače do souboru určitého typu mají odlišné chování. Ale všechny dokumenty mají většinou stejnou strukturu (hlavička, tělo a patička). Všechny zapisovací algoritmy se tedy skládají ze stejných primitivních operací ZapisHlavicku(), ZapisTelo() a ZapisPaticku(). Právě toho využívá vzor Template Method.

Definice vzoru Template Method

Vzor Template Method zavádí kostru algoritmu pomocí metod, které symbolizují jeho jednotlivé kroky. Ty se nazývají primitivní operace a jedná se o metody abstraktní a privátní. Vzor je reprezentován abstraktní třídou, jejíž potomci poté implementují konkrétní algoritmy. Zde je UML diagram:

Návrhový vzor Template Method - Návrhové vzory GoF

Algoritmy (konkrétní třídy) poté obsahují jednotné rozhraní, například ZapisHlavicku(), ZapisTelo() a ZapisPaticku(), ale zmíněné kroky si provádí po svém. Rozhraní je privátní a jeho volání provádí jedna veřejná metoda, která je implementována v abstraktní třídě. V našem UML diagramu je označena jako TemplateMethod(). V praxi by se mohla jmenovat např. Uloz(). Metoda se potomky podědí, primitivní operace potomci doimplementují. Problém se rozdělí do podproblémů, a tak se zjednoduší.

Počet kroků by měl být co nejmenší a měly by být označovány nějakým prefixem, například DoWriteHead().

Ačkoli se jedná o odlišné algoritmy, získáme jednotné rozhraní. To zpřehlední kód a usnadní další rozšiřování systému. Vzor Template Method je v podstatě podvzorem vzoru Strategy.

V další lekci, State, si ukážeme návrhový vzor State, který umožňuje objektu razantně změnit své chování, které je závislé na stavu tohoto objektu. Tento vzor nahrazuje složité větvení uvnitř objektu.


 

Předchozí článek
Strategy (strategie)
Všechny články v sekci
Návrhové vzory GoF
Přeskočit článek
(nedoporučujeme)
State
Článek pro vás napsal David Hartinger
Avatar
Uživatelské hodnocení:
18 hlasů
David je zakladatelem ITnetwork a programování se profesionálně věnuje 15 let. Má rád Nirvanu, nemovitosti 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