Kaltaisesi lukijat auttavat tukemaan MUO: ta. Kun teet ostoksen käyttämällä sivustollamme olevia linkkejä, voimme ansaita kumppanipalkkion.

Mallimenetelmän suunnittelumallin avulla voit määrittää algoritmin vaiheet luokan yhdessä menetelmässä. Tämän avulla voit rajoittaa sovelluksen tietyt toiminnot yhteen menetelmään.

Jokainen mallimenetelmän määrittelemä algoritmin vaihe on sisäinen menetelmä. Mallimenetelmä käsittelee kuitenkin vain joidenkin sisäisten menetelmiensä toteutuksen. Alaluokat toteuttavat yleensä yhden tai useamman mallimenetelmän sisäisen menetelmän.

Alaluokka voi toteuttaa abstraktin menetelmän, mutta se ei voi määritellä uudelleen lopullisen menetelmän toteuttamaa algoritmia.

Kuinka mallimenetelmä toimii

Tyypillisellä mallimenetelmämallilla on seuraava rakenne:

lopullinenmitätönmallimenetelmä(){
abstraktiOperaatio1();
abstraktiOperaatio2();

konkreettinenOperaatio1();
konkreettinenOperaatio2();

koukku();
}

Ensimmäinen tärkeä asia on huomata, että templateMethod() on lopullinen, joten mikään alaluokka ei voi ohittaa tätä menetelmää. Toinen tärkeä huomioitava asia on kolme menetelmätyyppiä, joita mallimenetelmämalli käyttää: konkreettinen, abstrakti ja koukku.

Abstrakti luokka, joka sisältää mallimenetelmän, toteuttaa kaikki konkreettiset menetelmänsä, kun taas konkreettiset alaluokat toteuttavat abstraktit menetelmänsä. Hook-menetelmä ei yleensä tee mitään oletusarvoisesti, mutta alaluokalla on mahdollisuus ohittaa nämä menetelmät tarvittaessa.

Mallimenetelmämallin käyttöönotto Javassa

Mallimenetelmämalli toimii puitteena sovellukselle. Joten näet usein tämän mallin ohjelmistokehyksissä, jotka tarjoavat suunnitelman sovelluskehitykseen.

Voit esimerkiksi yhdistää sovelluksesi johonkin monista tietokantajärjestelmistä. Vaiheet yhteyden muodostamiseksi tietokantaan ja sen käyttämiseksi noudattavat samanlaista mallia:

julkinenabstraktiluokkaaTietokanta{
// mallimenetelmä
lopullinenmitätöntietokantamalli(){
// abstrakteja menetelmiä
setDBDriver();
setCredentials();

// konkreettinen menetelmä
kytkeä();

// abstrakteja menetelmiä
createDB();
setData();
readData();

// koukkumenetelmiä
if (userWantsToUpdate()) {
updateData();
}

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

// konkreettinen menetelmä
closeConnection();
}

abstraktimitätönsetDBDriver();
abstraktimitätönsetCredentials();
abstraktimitätönluo DB();
abstraktimitätönsetData();
abstraktimitätönreadData();
abstraktimitätönpäivitäData();
abstraktimitätönPoista tiedot();

mitätönkytkeä(){
System.out.println("Yhdistetään tietokantaan...");
}

mitätönsulje yhteys(){
System.out.println("Tietokantayhteyttä tuhotaan...");
}

booleanuserWantsToUpdate(){
palataväärä;
}

booleanuserWantsToDelete(){
palataväärä;
}
}

Tämä esimerkkitietokantaluokka luo mallimetodimallin avulla mallin, jota voit käyttää minkä tahansa tietokannan kanssa. Käyttääksesi tietokantaa sovelluksesi on muodostettava yhteys siihen ja tuhottava yhteys käytön jälkeen. Nämä toiminnot ovat yleensä samat kaikille tietokannoille. Siksi abstrakti tietokantaluokka voi toteuttaa kytkeä() ja closeConnection() menetelmiä.

Muut mallimenetelmän menetelmät vaihtelevat tietokannan tyypin mukaan. Esimerkiksi MySQL-tietokanta tallentaa tiedot taulukoihin, kun taas a MongoDB-tietokanta tallentaa tiedot kokoelmiin. Jos haluat käyttää a MySQL-tietokanta Javassa, luo vain uusi MySQL-luokka, joka laajentaa tietokantaluokkaa:

julkinenluokkaaMySQLulottuuTietokanta{
@Ohittaa
mitätönsetDBDriver(){
System.out.println("Valitaan MySQL-ohjainta...");
}

@Ohittaa
mitätönsetCredentials(){
System.out.println("Asetetaan MySQL-tietokannan tunnistetietoja...");
}

@Ohittaa
mitätönluo DB(){
System.out.println("Luodaan uutta taulukkoa...");
}

@Ohittaa
mitätönsetData(){
System.out.println("Lisätään tietoja tietokantaan...");
}

@Ohittaa
mitätönreadData(){
System.out.println("Haetaan tietoja tietokannasta...");
}

@Ohittaa
mitätönpäivitäData(){
System.out.println("Päivitetään tietoja tietokannassa...");
}

@Ohittaa
mitätönPoista tiedot(){
System.out.println("Poistetaan tietoja tietokannasta...");
}
}

MySQL-luokka toteuttaa kaikki tietokantaluokan abstraktit menetelmät. Se voi myös ohittaa joitain konkreettisia menetelmiä. Se ei kuitenkaan voi koskea tietokantamalli() menetelmää, joka käyttää viimeistä avainsanaa.

julkinenluokkaaMain{
julkinenstaattinenmitätönpää(merkkijono[] args){
Tietokanta mySQLDB = Uusi MySQL();
mySQLDB.databaseTemplate();
}
}

Tämä pääluokka luo uuden MySQL-tietokantaobjektin ja simuloi mallimenetelmän avulla, kuinka sovellus muodostaisi yhteyden tietokantaan. Päämenetelmän suorittaminen tulostaa seuraavan tulosteen konsoliin:

Tulosteessa huomaat, että sovellus ei koskaan kutsu updateData() ja deleteData() menetelmiä. Tästä syystä koukkumenetelmät ovat tärkeitä. SQL-tietokannassa kannattaa luoda uusia taulukoita, lisätä tietoja ja tarkastella tietojasi. Et kuitenkaan ehkä halua päivittää tai poistaa tietoja. Siksi koukkumenetelmät antavat alaluokille mahdollisuuden hallita näitä algoritmin kriittisiä puolia.

@Ohittaa
booleanuserWantsToUpdate(){
palatatotta;
}

Lisäämällä yllä olevan koodin MySQL-luokkaan sovellus päivittää nyt tietokannan tiedot. Jos suoritat pääluokan uudelleen, se näyttää seuraavan päivitetyn tulosteen:

Kuten näet, sovellus päivittää nyt tietokannan tietoja.

Mallimenetelmän suunnittelumallin käytön edut

Mallimenetelmämallin suuri etu on, että se edistää ohjelmistojen uudelleenkäytettävyyttä. Tämä suunnittelumalli tukee myös tehokasta ohjelmointia. Alaluokan tarvitsee toteuttaa vain menetelmät, jotka ovat ainutlaatuisia sen toiminnalle.

Lisäksi mallimenetelmämallia käyttävä sovellus on turvallisempi, koska ulkoiset luokat eivät voi muuttaa sen toimintarakennetta.