Čitatelji poput vas podržavaju MUO. Kada kupite putem poveznica na našoj stranici, možemo zaraditi partnersku proviziju.

Uzorak dizajna metode predloška omogućuje definiranje koraka algoritma unutar jedne metode klase. To vam omogućuje da ograničite određene operacije aplikacije na jednu metodu.

Svaki korak algoritma koji metoda predloška definira je unutarnja metoda. Međutim, metoda predloška obrađuje samo implementaciju nekih svojih unutarnjih metoda. Podklase obično implementiraju jednu ili više unutarnjih metoda metode predloška.

Potklasa može implementirati apstraktnu metodu, ali ne može redefinirati algoritam implementiran konačnom metodom.

Kako funkcionira metoda predloška

Tipični uzorak metode predloška imat će sljedeću strukturu:

konačniponištititemplateMethod(){
apstraktnaOperacija1();
apstraktnaOperacija2();

konkretna operacija1();
konkretna operacija2();

kuka();
}

Prva važna stvar koju treba primijetiti je da je templateMethod() konačan, tako da nijedna podklasa ne može nadjačati ovu metodu. Druga važna stvar koju treba napomenuti su tri vrste metoda koje koristi uzorak metode predloška: konkretna, apstraktna i kuka.

Apstraktna klasa koja sadrži metodu predloška implementira sve svoje konkretne metode, dok konkretne podklase implementiraju svoje apstraktne metode. Hook metoda obično ne radi ništa prema zadanim postavkama, ali podklasa ima mogućnost nadjačati te metode kada je to potrebno.

Implementacija uzorka metode predloška u Javi

Uzorak metode predloška djeluje kao okvir za aplikaciju. Dakle, često ćete vidjeti ovaj obrazac u softverskim okvirima koji pružaju nacrt za razvoj aplikacija.

Na primjer, možete povezati svoju aplikaciju s jednim od mnogih sustava baza podataka. Koraci za povezivanje i korištenje baze podataka slijede sličan predložak:

javnostsažetakrazredaBaza podataka{
// metoda predloška
konačniponištitibaza podatakaTemplate(){
// apstraktne metode
setDBDriver();
setCredentials();

// konkretna metoda
Spojiti();

// apstraktne metode
kreirajDB();
postaviPodatke();
pročitaj podatke();

// metode zakačivanja
if (userWantsToUpdate()) {
ažuriranjePodataka();
}

if (userWantsToDelete()) {
izbrišiPodatke();
}

// konkretna metoda
zatvoriVeza();
}

sažetakponištitisetDBDriver();
sažetakponištitisetCredentials();
sažetakponištitistvoritiDB();
sažetakponištitisetData();
sažetakponištitireadData();
sažetakponištitiupdateData();
sažetakponištitideleteData();

poništitiSpojiti(){
System.out.println("Povezivanje s bazom podataka...");
}

poništiticloseConnection(){
System.out.println("Uništavanje veze s bazom podataka...");
}

Booleovkorisnik želi ažurirati(){
povrataklažno;
}

BooleovkorisnikŽeliIzbrisati(){
povrataklažno;
}
}

Ovaj primjer klase baze podataka koristi obrazac metode predloška za stvaranje predloška koji možete koristiti s bilo kojom bazom podataka. Da biste koristili bazu podataka, vaša će se aplikacija morati povezati s njom, a zatim prekinuti vezu nakon upotrebe. Te su aktivnosti obično iste za sve baze podataka. Stoga klasa apstraktne baze podataka može implementirati Spojiti() i closeConnection() metode.

Ostale metode u metodi predloška razlikovat će se ovisno o vrsti baze podataka. Na primjer, MySQL baza podataka pohranjuje podatke u tablice, dok a MongoDB baza podataka pohranjuje podatke u zbirke. Ako želite koristiti a MySQL baza podataka u Javi, jednostavno stvorite novu MySQL klasu koja proširuje klasu baze podataka:

javnostrazredaMySQLproteže seBaza podataka{
@Nadjačaj
poništitisetDBDriver(){
System.out.println("Odabir upravljačkog programa MySQL...");
}

@Nadjačaj
poništitisetCredentials(){
System.out.println("Postavljanje vjerodajnica MySQL baze podataka...");
}

@Nadjačaj
poništitistvoritiDB(){
System.out.println("Izrada nove tablice...");
}

@Nadjačaj
poništitisetData(){
System.out.println("Umetanje podataka u bazu...");
}

@Nadjačaj
poništitireadData(){
System.out.println("Dohvaćanje podataka iz baze podataka...");
}

@Nadjačaj
poništitiupdateData(){
System.out.println("Ažuriranje podataka u bazi podataka...");
}

@Nadjačaj
poništitideleteData(){
System.out.println("Brisanje podataka iz baze podataka...");
}
}

Klasa MySQL implementira sve apstraktne metode klase Database. Također može nadjačati neke konkretne metode. Međutim, ne može dodirnuti Predložak baze podataka() metoda koja koristi ključnu riječ final.

javnostrazredaGlavni{
javnoststatičkiponištitiglavni(String[] argumenti){
Baza podataka mySQLDB = novi MySQL();
mySQLDB.predložak baze podataka();
}
}

Ova glavna klasa stvara novi MySQL objekt baze podataka i koristi metodu predloška za simulaciju kako će se aplikacija povezati s bazom podataka. Pokretanje glavne metode ispisuje sljedeći izlaz na konzolu:

U izlazu ćete primijetiti da aplikacija nikada ne poziva ažuriranjePodataka() i izbrisatiPodatke() metode. Zbog toga su metode udice važne. U SQL bazi podataka poželjet ćete stvoriti nove tablice, umetnuti podatke i pregledati svoje podatke. Međutim, možda ne želite ažurirati ili izbrisati podatke. Stoga metode zakačivanja daju podklasama mogućnost kontrole ovih kritičnih aspekata algoritma.

@Nadjačaj
Booleovkorisnik želi ažurirati(){
povratakpravi;
}

Jednostavnim dodavanjem gornjeg koda u MySQL klasu, aplikacija sada ažurira podatke u bazi podataka. Ako ponovno pokrenete glavnu klasu, ona će prikazati sljedeći ažurirani izlaz:

Kao što vidite, aplikacija sada ažurira podatke u bazi podataka.

Prednosti korištenja uzorka dizajna metode predloška

Glavna prednost obrasca metode predloška je ta što promovira ponovnu upotrebu softvera. Ovaj uzorak dizajna također podržava učinkovito programiranje. Potklasa treba samo implementirati metode koje su jedinstvene za njezin rad.

Osim toga, aplikacija koja koristi uzorak metode predloška sigurnija je jer vanjske klase ne mogu promijeniti njezinu radnu strukturu.