Template Method (šablonová metoda)

Návrhové vzory Template Method (šablonová metoda)

Návrhový vzor Template Method definuje kostru algoritmu, tedy jeho jednotlivé kroky. Potomci poté kroky implementují a představují zaměnitelné algoritmy.

Motivace

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()). Toho využívá vzor 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í, privátní. Vzor je reprezentován abstraktní třídou, jejíž potomci poté implementují konkrétní algoritmy.

Návrhový vzor Template Method

Algoritmy (konkrétní třídy) poté obsahují jednotné rozhraní (např. ZapisHlavicku(), ZapisTelo() a ZapisPaticku()), ale tyto kroky si provádí po svém. Toto rozhraní je privátní a jeho volání provádí jedna veřejná metoda, která je implementována v abstraktní třídě (zde označena jako Template Metoda). V praxi by se mohla jmenovat např. Ulož. Metoda se předky podědí, primitivní operace předci doimplementují. Problém se rozdělí do podproblémů a tak se zjednoduší.

Ačkoli se jedná o odlišné algoritmy, získáme jednotné rozhraní, které zpřehlední kód a usnadní další rozšiřování systému.

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

Vzor Template Method je v podstatě podvzorem vzoru Strategy .


 

  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 (1 hlasů) :
4444 4


 


Miniatura
Předchozí článek
Strategy (strategie)
Miniatura
Všechny články v sekci
Návrhové vzory

 

 

Komentáře

Avatar
Corrimson
Člen
Avatar
Corrimson:

Zdravím, nevím, jestli jsem to jenom nepochopil špatně, ale měl jsem za to, že abstraktní metody nemohou být private, protože je chceme implementovat v potomkovi. Jak to, že v tomto vzoru jsou private? Díky.

 
Odpovědět 18.5.2013 18:21
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Corrimson
Petr Nymsa:

Metody a datové položky mohou být privátní. Označíme je slovíčkem protected (v C#). Takto se napsaná metoda / položka zdědí ale je stále privátní. Public se dědí automaticky

Editováno 18.5.2013 18:30
Odpovědět 18.5.2013 18:30
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Kit
Redaktor
Avatar
Odpovídá na Petr Nymsa
Kit:

Asi tomu nerozumím, ale podle mne se privátní označuje private a chraněné protected.

Když něco označím private, tak to v potomkovi neuvidím.

Editováno 18.5.2013 19:31
Odpovědět  +1 18.5.2013 19:29
Vlastnosti objektů by neměly být veřejné. A to ani prostřednictvím getterů/setterů.
Avatar
Petr Nymsa
Redaktor
Avatar
Odpovídá na Kit
Petr Nymsa:

No a když to označím jako protected, měl bych to v potomkovi vidět ale z venčí to bude stále private -> nepřístupné

Odpovědět  +1 18.5.2013 20:24
Pokrok nezastavíš, neusni a jdi s ním vpřed
Avatar
Corrimson
Člen
Avatar
Odpovídá na Petr Nymsa
Corrimson:

Jo, díky, asi jsem jenom příliš velký hnidopich, ale tady v tom UML jsou abstraktní metody označeny „-“ jako private, což při implementaci způsobí, že dostanu od kompilátoru vynadáno. Modifikátor protected by měl být značen #, pokud se nemýlím. Tak jsem se chtěl jenom ujistit o korektnosti toho zápisu a terminologii.

Editováno 19.5.2013 0:50
 
Odpovědět  +1 19.5.2013 0:50
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 5 zpráv z 5.