Care este modelul de proiectare a metodei șablonului?

Care este modelul de proiectare a metodei șablonului?
Cititorii ca tine ajută la sprijinirea MUO. Când efectuați o achiziție folosind link-uri de pe site-ul nostru, este posibil să câștigăm un comision de afiliat.

Modelul de proiectare a metodei șablon vă permite să definiți pașii unui algoritm într-o singură metodă a unei clase. Acest lucru vă permite să limitați operațiunile specifice ale unei aplicații la o singură metodă.





Fiecare pas al algoritmului pe care îl definește metoda șablonului este o metodă interioară. Cu toate acestea, metoda șablonului se ocupă doar de implementarea unora dintre metodele sale interioare. Subclasele implementează de obicei una sau mai multe dintre metodele interne ale metodei șablon.





REALIZAREA VIDEOCLIPULUI ZILEI

O subclasă poate implementa o metodă abstractă, dar nu poate redefini algoritmul implementat de o metodă finală.





Cum funcționează metoda șablonului

Un model tipic de metodă de șablon va avea următoarea structură:

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

concreteOperation1();
concreteOperation2();

hook();
}

Primul lucru important de reținut este că templateMethod() este final, așa că nicio subclasă nu poate suprascrie această metodă. Un alt lucru important de remarcat sunt cele trei tipuri de metode pe care modelul metodei șablon le folosește: concret, abstract și hook.



Clasa abstractă care găzduiește metoda șablon implementează toate metodele sale concrete, în timp ce subclasele concrete implementează metodele sale abstracte. Metoda hook de obicei nu face nimic implicit, dar o subclasă are capacitatea de a suprascrie aceste metode atunci când este necesar.

Implementarea modelului metodei șablon în Java

Modelul metodei șablon acționează ca un cadru pentru o aplicație. Deci, veți vedea adesea acest model în cadrele software care oferă planul pentru dezvoltarea aplicațiilor.





De exemplu, vă puteți conecta aplicația la unul dintre multele sisteme de baze de date. Pașii pentru conectarea și utilizarea unei baze de date urmează un șablon similar:

cum să faceți capturi de ecran fără ca aceștia să știe
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;
}
}

Acest exemplu de clasă de bază de date utilizează modelul metodei șablon pentru a crea un șablon pe care îl puteți utiliza cu orice bază de date. Pentru a utiliza o bază de date, aplicația dvs. va trebui să se conecteze la aceasta, apoi să distrugă conexiunea după utilizare. Aceste activități sunt de obicei aceleași pentru toate bazele de date. Prin urmare, clasa abstractă de bază de date poate implementa conectați() și closeConnection() metode.





Celelalte metode din metoda șablonului vor diferi în funcție de tipul bazei de date. De exemplu, o bază de date MySQL stochează date în tabele, în timp ce a Baza de date MongoDB stochează date în colecții . Dacă doriți să utilizați un Baza de date MySQL în Java , pur și simplu creați o nouă clasă MySQL care extinde clasa Bază de date:

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...");
}
}

Clasa MySQL implementează toate metodele abstracte ale clasei Database. De asemenea, poate trece peste unele metode concrete. Cu toate acestea, nu poate atinge databaseTemplate() metoda, care folosește cuvântul cheie final.

public class Main { 
public static void main(String[] args) {
Database mySQLDB = new MySQL();
mySQLDB.databaseTemplate();
}
}

Această clasă Main creează un nou obiect de bază de date MySQL și folosește metoda șablonului pentru a simula modul în care o aplicație s-ar conecta la baza de date. Rularea metodei principale imprimă următoarea ieșire pe consolă:

unde poți imprima gratuit
  Metoda șablonului bazei de date MySQL

În rezultat, veți observa că aplicația nu apelează niciodată updateData() și deleteData() metode. Acesta este motivul pentru care metodele de cârlig sunt importante. Într-o bază de date SQL, veți dori să creați tabele noi, să inserați date și să vă vizualizați datele. Cu toate acestea, este posibil să nu doriți să actualizați sau să ștergeți datele. Prin urmare, metodele hook oferă subclaselor opțiunea de a controla aceste aspecte critice ale algoritmului.

@Override 
boolean userWantsToUpdate() {
return true;
}

Prin simpla adăugare a codului de mai sus la clasa MySQL, aplicația actualizează acum datele din baza de date. Dacă rulați din nou clasa Main, va afișa următoarea ieșire actualizată:

  Actualizarea metodei șablonului bazei de date MySQL

După cum puteți vedea, aplicația actualizează acum datele din baza de date.

Beneficiile utilizării modelului de proiectare a metodei șablonului

Un avantaj major al modelului metodei șablon este că promovează reutilizarea software-ului. Acest model de design acceptă și programare eficientă. O subclasă trebuie doar să implementeze metode care sunt unice pentru funcționarea sa.

În plus, o aplicație care utilizează modelul metodei șablon este mai sigură, deoarece clasele externe nu își pot modifica structura operațională.