Lesere som deg er med på å støtte MUO. Når du foretar et kjøp ved å bruke lenker på nettstedet vårt, kan vi tjene en tilknyttet provisjon.
Malmetodens designmønster lar deg definere trinnene til en algoritme innenfor en enkelt metode i en klasse. Dette lar deg begrense spesifikke operasjoner for en applikasjon til en enkelt metode.
Hvert trinn i algoritmen som malmetoden definerer er en indre metode. Imidlertid håndterer malmetoden bare implementeringen av noen av sine indre metoder. Underklasser implementerer vanligvis en eller flere av malmetodens indre metoder.
En underklasse kan implementere en abstrakt metode, men den kan ikke redefinere algoritmen implementert av en endelig metode.
Hvordan malmetoden fungerer
Et typisk malmetodemønster vil ha følgende struktur:
endeligtomrommalmetode(){
abstraktOperasjon1();
abstraktOperasjon2();konkretOperasjon1();
konkretOperasjon2();
krok();
}
Det første viktige å merke seg er at templateMethod() er endelig, så ingen underklasse kan overstyre denne metoden. Den andre viktige tingen å merke seg er de tre typene metoder som malmetodemønsteret bruker: konkret, abstrakt og krok.
Den abstrakte klassen som huser malmetoden implementerer alle dens konkrete metoder, mens konkrete underklasser implementerer dens abstrakte metoder. Hook-metoden gjør vanligvis ingenting som standard, men en underklasse har muligheten til å overstyre disse metodene når det er nødvendig.
Implementering av malmetodemønsteret i Java
Malmetodemønsteret fungerer som et rammeverk for en applikasjon. Så du vil ofte se dette mønsteret i programvarerammer som gir planen for applikasjonsutvikling.
Du kan for eksempel koble applikasjonen til ett av mange databasesystemer. Trinnene for å koble til og bruke en database følger en lignende mal:
offentligabstraktklasseDatabase{
// malmetode
endeligtomromdatabasemal(){
// abstrakte metoder
setDBDriver();
setCredentials();// konkret metode
koble();// abstrakte metoder
oppretteDB();
setData();
readData();// krokmetoder
if (userWantsToUpdate()) {
updateData();
}if (userWantsToDelete()) {
deleteData();
}// konkret metode
closeConnection();
}abstrakttomromsetDBDriver();
abstrakttomromsetCredentials();
abstrakttomromoppretteDB();
abstrakttomromsetData();
abstrakttomromleseData();
abstrakttomromoppdater Data();
abstrakttomromsletteData();tomromkoble(){
System.out.println("Kobler til databasen...");
}tomromlukkTilkobling(){
System.out.println("Ødelegger databasetilkoblingen ...");
}boolskuserWantsToUpdate(){
komme tilbakefalsk;
}
boolskuserWantsToDelete(){
komme tilbakefalsk;
}
}
Denne databaseklassen bruker malmetodemønsteret til å lage en mal som du kan bruke med en hvilken som helst database. For å bruke en database, må applikasjonen din koble til den, og deretter ødelegge tilkoblingen etter bruk. Disse aktivitetene er vanligvis de samme for alle databaser. Derfor kan den abstrakte databaseklassen implementere koble() og closeConnection() metoder.
De andre metodene i malmetoden vil variere basert på typen database. For eksempel lagrer en MySQL-database data i tabeller, mens en MongoDB-databasen lagrer data i samlinger. Hvis du ønsker å bruke en MySQL-database i Java, bare lag en ny MySQL-klasse som utvider Database-klassen:
offentligklasseMySQLstrekkerDatabase{
@Overstyring
tomromsetDBDriver(){
System.out.println("Velger MySQL-driver...");
}@Overstyring
tomromsetCredentials(){
System.out.println("Angir MySQL-databaselegitimasjon...");
}@Overstyring
tomromoppretteDB(){
System.out.println("Oppretter en ny tabell...");
}@Overstyring
tomromsetData(){
System.out.println("Setter inn data i databasen...");
}@Overstyring
tomromleseData(){
System.out.println("Henter data fra databasen...");
}@Overstyring
tomromoppdater Data(){
System.out.println("Oppdaterer data i databasen...");
}
@Overstyring
tomromsletteData(){
System.out.println("Sletter data fra databasen...");
}
}
MySQL-klassen implementerer alle de abstrakte metodene til Database-klassen. Det kan også overstyre noen konkrete metoder. Den kan imidlertid ikke berøre databaseTemplate() metode, som bruker det endelige søkeordet.
offentligklasseHoved{
offentligstatisktomromhoved-(String[] args){
Database mySQLDB = ny MySQL();
mySQLDB.databaseTemplate();
}
}
Denne hovedklassen lager et nytt MySQL-databaseobjekt og bruker malmetoden for å simulere hvordan en applikasjon vil koble seg til databasen. Ved å kjøre hovedmetoden skrives følgende ut til konsollen:
I utdataene vil du legge merke til at applikasjonen aldri kaller updateData() og deleteData() metoder. Dette er grunnen til at krokmetodene er viktige. I en SQL-database vil du lage nye tabeller, sette inn data og se dataene dine. Imidlertid vil du kanskje ikke oppdatere eller slette data. Derfor gir krokmetodene underklasser muligheten til å kontrollere disse kritiske aspektene ved algoritmen.
@Overstyring
boolskuserWantsToUpdate(){
komme tilbakeekte;
}
Ved ganske enkelt å legge til koden ovenfor til MySQL-klassen, oppdaterer applikasjonen nå dataene i databasen. Hvis du kjører hovedklassen igjen, vil den vise følgende oppdaterte utdata:
Som du kan se, oppdaterer applikasjonen nå dataene i databasen.
Fordelene ved å bruke malmetodens designmønster
En stor fordel med malmetodemønsteret er at det fremmer gjenbrukbarhet av programvare. Dette designmønsteret støtter også effektiv programmering. En underklasse trenger bare å implementere metoder som er unike for dens drift.
I tillegg er en applikasjon som bruker malmetodemønsteret sikrere, ettersom eksterne klasser ikke kan endre operasjonsstrukturen.