Bralci, kot ste vi, pomagajo podpirati MUO. Ko opravite nakup prek povezav na našem spletnem mestu, lahko zaslužimo partnersko provizijo.
Vzorec oblikovanja metode predloge vam omogoča, da definirate korake algoritma znotraj posamezne metode razreda. To vam omogoča, da določene operacije aplikacije omejite na eno samo metodo.
Vsak korak algoritma, ki ga definira metoda predloge, je notranja metoda. Vendar metoda predloge obravnava samo izvajanje nekaterih svojih notranjih metod. Podrazredi običajno izvajajo eno ali več notranjih metod metode predloge.
Podrazred lahko izvaja abstraktno metodo, vendar ne more na novo definirati algoritma, ki ga izvaja končna metoda.
Kako deluje metoda predloge
Tipičen vzorec metode predloge bo imel naslednjo strukturo:
dokončnoprazninatemplateMethod(){
abstraktna operacija1();
abstraktnaOperacija2();konkretna operacija1();
konkretna operacija2();
kavelj();
}
Prva pomembna stvar, ki jo morate upoštevati, je, da je templateMethod() končna, zato noben podrazred ne more preglasiti te metode. Druga pomembna stvar, ki jo je treba upoštevati, so tri vrste metod, ki jih uporablja vzorec metode predloge: konkretna, abstraktna in kavelj.
Abstraktni razred, ki vsebuje metodo predloge, izvaja vse svoje konkretne metode, medtem ko konkretni podrazredi izvajajo njene abstraktne metode. Kaveljska metoda običajno privzeto ne naredi ničesar, vendar ima podrazred možnost preglasiti te metode, kadar je to potrebno.
Implementacija vzorca metode predloge v Javi
Vzorec metode predloge deluje kot okvir za aplikacijo. Tako boste ta vzorec pogosto videli v okvirih programske opreme, ki zagotavljajo načrt za razvoj aplikacij.
Svojo aplikacijo lahko na primer povežete z enim od številnih sistemov baz podatkov. Koraki za povezavo in uporabo baze podatkov sledijo podobni predlogi:
javnostipovzetekrazredBaza podatkov{
// metoda predloge
dokončnoprazninadatabaseTemplate(){
// abstraktne metode
setDBDriver();
setCredentials();// konkretna metoda
poveži();// abstraktne metode
createDB();
setData();
branjePodatkov();// metode kavljev
if (userWantsToUpdate()) {
posodobiPodatke();
}if (userWantsToDelete()) {
izbrišiPodatke();
}// konkretna metoda
closeConnection();
}povzetekprazninasetDBDriver();
povzetekprazninasetCredentials();
povzetekprazninacreateDB();
povzetekprazninasetData();
povzetekprazninareadData();
povzetekprazninaupdateData();
povzetekprazninadeleteData();prazninapovezati(){
System.out.println("Povezovanje z bazo podatkov ...");
}prazninacloseConnection(){
System.out.println("Uničenje povezave z bazo podatkov ...");
}logičnouserWantsToUpdate(){
vrnitevlažno;
}
logičnouporabnik želi izbrisati(){
vrnitevlažno;
}
}
Ta primer razreda zbirke podatkov uporablja vzorec metode predloge za ustvarjanje predloge, ki jo lahko uporabite s katero koli zbirko podatkov. Če želite uporabljati bazo podatkov, se bo morala vaša aplikacija z njo povezati, nato pa povezavo po uporabi prekiniti. Te dejavnosti so običajno enake za vse zbirke podatkov. Zato lahko abstraktni razred zbirke podatkov izvaja povezati () in closeConnection() metode.
Druge metode v metodi predloge se bodo razlikovale glede na vrsto baze podatkov. Na primer, baza podatkov MySQL shranjuje podatke v tabelah, medtem ko a Baza podatkov MongoDB shranjuje podatke v zbirke. Če želite uporabiti a Baza podatkov MySQL v Javi, preprosto ustvarite nov razred MySQL, ki razširi razred Database:
javnostirazredMySQLse raztezaBaza podatkov{
@Preglasi
prazninasetDBDriver(){
System.out.println("Izbira gonilnika MySQL ...");
}@Preglasi
prazninasetCredentials(){
System.out.println("Nastavitev poverilnice baze podatkov MySQL ...");
}@Preglasi
prazninacreateDB(){
System.out.println("Ustvarjanje nove tabele ...");
}@Preglasi
prazninasetData(){
System.out.println("Vnašanje podatkov v bazo ...");
}@Preglasi
prazninareadData(){
System.out.println("Pridobivanje podatkov iz baze podatkov ...");
}@Preglasi
prazninaupdateData(){
System.out.println("Posodabljanje podatkov v bazi ...");
}
@Preglasi
prazninadeleteData(){
System.out.println("Brisanje podatkov iz zbirke podatkov ...");
}
}
Razred MySQL implementira vse abstraktne metode razreda Database. Lahko tudi preglasi nekatere konkretne metode. Vendar se ne more dotakniti baza podatkovTemplate() metoda, ki uporablja končno ključno besedo.
javnostirazredGlavni{
javnostistatičnaprazninaglavni(Argumenti niza[]){
Baza podatkov mySQLDB = novo MySQL();
mySQLDB.databaseTemplate();
}
}
Ta glavni razred ustvari nov objekt baze podatkov MySQL in uporablja metodo predloge za simulacijo, kako bi se aplikacija povezala z bazo podatkov. Zagon glavne metode natisne naslednji izhod na konzolo:
V izhodu boste opazili, da aplikacija nikoli ne pokliče posodobiPodatki() in deleteData() metode. Zato so metode kavljev pomembne. V bazi podatkov SQL boste želeli ustvariti nove tabele, vstaviti podatke in si ogledati svoje podatke. Vendar morda ne želite posodobiti ali izbrisati podatkov. Zato metode kavljev dajejo podrazredom možnost nadzora teh kritičnih vidikov algoritma.
@Preglasi
logičnouserWantsToUpdate(){
vrnitevprav;
}
Z enostavnim dodajanjem zgornje kode v razred MySQL aplikacija zdaj posodobi podatke v bazi podatkov. Če znova zaženete glavni razred, bo prikazan naslednji posodobljen rezultat:
Kot lahko vidite, aplikacija zdaj posodablja podatke v bazi podatkov.
Prednosti uporabe vzorca načrtovanja metode predloge
Glavna prednost vzorca metode predloge je, da spodbuja ponovno uporabo programske opreme. Ta oblikovalski vzorec podpira tudi učinkovito programiranje. Podrazred mora izvajati le metode, ki so edinstvene za njegovo delovanje.
Poleg tega je aplikacija, ki uporablja vzorec metode predloge, varnejša, saj zunanji razredi ne morejo spremeniti njene strukture delovanja.