Čitatelia ako vy pomáhajú podporovať MUO. Keď uskutočníte nákup pomocou odkazov na našej stránke, môžeme získať pridruženú províziu.

Vzor návrhu metódy šablóny vám umožňuje definovať kroky algoritmu v rámci jednej metódy triedy. To vám umožňuje obmedziť špecifické operácie aplikácie na jednu metódu.

Každý krok algoritmu, ktorý definuje metóda šablóny, je vnútornou metódou. Metóda šablóny však rieši iba implementáciu niektorých svojich vnútorných metód. Podtriedy zvyčajne implementujú jednu alebo viac vnútorných metód metódy šablóny.

Podtrieda môže implementovať abstraktnú metódu, ale nemôže predefinovať algoritmus implementovaný konečnou metódou.

Ako funguje metóda šablóny

Typický vzor metódy šablóny bude mať nasledujúcu štruktúru:

KonečnýneplatnéšablónaMetóda(){
abstractOperation1();
abstractOperation2();

konkrétnyOperácia1();
betónOperácia2();

háčik();
}

Prvá dôležitá vec, ktorú treba poznamenať, je, že templateMethod() je konečná, takže žiadna podtrieda nemôže túto metódu prepísať. Ďalšou dôležitou vecou, ​​ktorú si treba všimnúť, sú tri typy metód, ktoré používa vzor metódy šablóny: betón, abstrakt a hák.

instagram viewer

Abstraktná trieda, ktorá obsahuje metódu šablóny, implementuje všetky jej konkrétne metódy, zatiaľ čo konkrétne podtriedy implementujú jej abstraktné metódy. Metóda háku zvyčajne štandardne nerobí nič, ale podtrieda má schopnosť tieto metódy v prípade potreby prepísať.

Implementácia vzoru metódy šablóny v jazyku Java

Vzor metódy šablóny funguje ako rámec pre aplikáciu. Tento vzor teda často uvidíte v softvérových rámcoch, ktoré poskytujú návrh na vývoj aplikácií.

Svoju aplikáciu môžete napríklad pripojiť k jednému z mnohých databázových systémov. Kroky na pripojenie a používanie databázy sa riadia podobnou šablónou:

verejnostiabstraktnétriedaDatabáza{
// metóda šablóny
KonečnýneplatnéŠablóna databázy(){
// abstraktné metódy
setDBDriver();
setCredentials();

// konkrétna metóda
pripojiť ();

// abstraktné metódy
createDB();
setData();
readData();

// metódy háku
if (userWantsToUpdate()) {
updateData();
}

if (userWantsToDelete()) {
deleteData();
}

// konkrétna metóda
closeConnection();
}

abstraktnéneplatnésetDBDriver();
abstraktnéneplatnésetCredentials();
abstraktnéneplatnévytvoriťDB();
abstraktnéneplatnésetData();
abstraktnéneplatnéreadData();
abstraktnéneplatnéupdateData();
abstraktnéneplatnédeleteData();

neplatnépripojiť(){
System.out.println("Pripája sa k databáze...");
}

neplatnézavrieťPripojenie(){
System.out.println("Ruší sa pripojenie k databáze...");
}

boolovská hodnotauserWantsToUpdate(){
vrátiťfalošný;
}

boolovská hodnotauserWantsToDelete(){
vrátiťfalošný;
}
}

Táto vzorová trieda databázy používa vzor metódy šablóny na vytvorenie šablóny, ktorú môžete použiť s ľubovoľnou databázou. Ak chcete použiť databázu, vaša aplikácia sa k nej bude musieť pripojiť a po použití spojenie zničiť. Tieto činnosti sú zvyčajne rovnaké pre všetky databázy. Preto môže abstraktná trieda databázy implementovať pripojiť () a closeConnection() metódy.

Ostatné metódy v metóde šablóny sa budú líšiť v závislosti od typu databázy. Napríklad databáza MySQL ukladá údaje do tabuliek, zatiaľ čo a Databáza MongoDB ukladá údaje do kolekcií. Ak chcete použiť a Databáza MySQL v jazyku Java, jednoducho vytvorte novú triedu MySQL, ktorá rozširuje triedu Database:

verejnostitriedaMySQLpredlžujeDatabáza{
@Prepísať
neplatnésetDBDriver(){
System.out.println("Výber ovládača MySQL...");
}

@Prepísať
neplatnésetCredentials(){
System.out.println("Nastavenie poverení databázy MySQL...");
}

@Prepísať
neplatnévytvoriťDB(){
System.out.println("Vytvára sa nová tabuľka...");
}

@Prepísať
neplatnésetData(){
System.out.println("Vkladanie údajov do databázy...");
}

@Prepísať
neplatnéreadData(){
System.out.println("Načítavajú sa údaje z databázy...");
}

@Prepísať
neplatnéupdateData(){
System.out.println("Aktualizácia údajov v databáze...");
}

@Prepísať
neplatnédeleteData(){
System.out.println("Odstraňujú sa údaje z databázy...");
}
}

Trieda MySQL implementuje všetky abstraktné metódy triedy Database. Môže tiež prepísať niektoré konkrétne metódy. Nemôže sa však dotknúť DatabaseTemplate() metóda, ktorá používa konečné kľúčové slovo.

verejnostitriedaHlavná{
verejnostistatickéneplatnéHlavná(Reťazec[] argumentov){
Databáza mySQLDB = Nový MySQL();
mySQLDB.databaseTemplate();
}
}

Táto trieda Main vytvára nový databázový objekt MySQL a používa metódu šablóny na simuláciu toho, ako sa aplikácia pripojí k databáze. Spustenie hlavnej metódy vytlačí na konzolu nasledujúci výstup:

Vo výstupe si všimnete, že aplikácia nikdy nevolá updateData() a deleteData() metódy. To je dôvod, prečo sú metódy háku dôležité. V databáze SQL budete chcieť vytvárať nové tabuľky, vkladať údaje a zobrazovať svoje údaje. Možno však nebudete chcieť aktualizovať alebo odstrániť údaje. Preto metódy háku dávajú podtriedam možnosť riadiť tieto kritické aspekty algoritmu.

@Prepísať
boolovská hodnotauserWantsToUpdate(){
vrátiťpravda;
}

Jednoduchým pridaním vyššie uvedeného kódu do triedy MySQL aplikácia teraz aktualizuje údaje v databáze. Ak znova spustíte triedu Main, zobrazí sa nasledujúci aktualizovaný výstup:

Ako vidíte, aplikácia teraz aktualizuje údaje v databáze.

Výhody použitia vzoru návrhu metódy šablóny

Hlavnou výhodou vzoru metódy šablóny je, že podporuje opätovnú použiteľnosť softvéru. Tento dizajnový vzor tiež podporuje efektívne programovanie. Podtrieda potrebuje iba implementovať metódy, ktoré sú jedinečné pre jej činnosť.

Okrem toho aplikácia, ktorá používa vzor metódy šablóny, je bezpečnejšia, pretože externé triedy nemôžu zmeniť jej operačnú štruktúru.