Template Method (šablónová metóda)
Návrhový vzor Template Method definuje kostru algoritmu, teda jeho jednotlivé kroky. Potomkovia potom kroky implementujú a predstavujú zameniteľné algoritmy.
Motivácia
V našej aplikácii sa môže objaviť niekoľko algoritmov s rovnakou
štruktúrou, ale iným správaním. Ako príklad sa často uvádza uloženie
dokumentu do súboru určitého formátu. Zapisovače do súboru určitého typu
majú odlišné správanie, ale všetky dokumenty majú väčšinou rovnakú
štruktúru (hlavička, telo a pätička). Všetky zapisovacia algoritmy sa teda
skladajú z rovnakých primitívnych operácií (ZapisHlavicku()
,
ZapisTelo()
a ZapisPaticku()
). Toho využíva vzor
Template Method.
Vzor
Template Method zavádza kostru algoritmu pomocou metód, ktoré symbolizujú jeho jednotlivé kroky. Tie sa nazývajú primitívne operácie a jedná sa o metódy abstraktné, privátne. Vzor je reprezentovaný abstraktné triedou, ktorej potomkovia potom implementujú konkrétne algoritmy.
Algoritmy (konkrétnej triedy) potom obsahujú jednotné rozhranie (napr.
ZapisHlavicku()
, ZapisTelo()
a
ZapisPaticku()
), ale tieto kroky si robí po svojom. Toto rozhranie
je privátne a jeho volanie vykonáva jedna verejná metóda, ktorá je
implementovaná v abstraktnej triede (tu označená ako
TemplateMethod()
). V praxi by sa mohla menovať napr.
Uloz()
. Metóda sa potomkami zdedí, primitívne operácie
potomkovia doimplementují. Problém sa rozdelí do podproblémů a tak sa
zjednoduší.
Hoci sa jedná o odlišné algoritmy, získame jednotné rozhranie, ktoré sprehľadní kód a uľahčí ďalšie rozširovanie systému.
Počet krokov by mal byť čo najmenšie a často sú
označované nejakým prefixom (napr. DoWriteHead()
).
Vzor Template Method je v podstate podvzorem vzore Strategy.