Aký je vzor návrhu metódy šablóny?

Aký je vzor návrhu metódy šablóny?
Č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.





VYUŽITIE VIDEA DŇA

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:

final void templateMethod() { 
abstractOperation1();
abstractOperation2();

concreteOperation1();
concreteOperation2();

hook();
}

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.



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:

public abstract class Database { 
// template method
final void databaseTemplate() {
// abstract methods
setDBDriver();
setCredentials();

// concrete method
connect();

// abstract methods
createDB();
setData();
readData();

// hook methods
if (userWantsToUpdate()) {
updateData();
}

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

// concrete method
closeConnection();
}

abstract void setDBDriver();
abstract void setCredentials();
abstract void createDB();
abstract void setData();
abstract void readData();
abstract void updateData();
abstract void deleteData();

void connect() {
System.out.println("Connecting to database...");
}

void closeConnection() {
System.out.println("Destroying database connection...");
}

boolean userWantsToUpdate() {
return false;
}

boolean userWantsToDelete() {
return false;
}
}

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:

public class MySQL extends Database { 
@Override
void setDBDriver() {
System.out.println("Selecting MySQL driver...");
}

@Override
void setCredentials() {
System.out.println("Setting MySQL database Credential...");
}

@Override
void createDB() {
System.out.println("Creating a new table...");
}

@Override
void setData() {
System.out.println("Inserting data into database...");
}

@Override
void readData() {
System.out.println("Retrieving data from database...");
}

@Override
void updateData() {
System.out.println("Updating data in database...");
}

@Override
void deleteData() {
System.out.println("Deleting data from database...");
}
}

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.

public class Main { 
public static void main(String[] args) {
Database mySQLDB = new 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:

  Metóda šablóny databázy MySQL

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.

@Override 
boolean userWantsToUpdate() {
return true;
}

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:

  Aktualizácia metódy šablóny databázy MySQL

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

ako postaviť anténu pre digitálny televízor

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.