Teiesugused lugejad aitavad MUO-d toetada. Kui teete ostu meie saidil olevate linkide abil, võime teenida sidusettevõtte komisjonitasu.

Mallmeetodi kujundusmuster võimaldab teil määratleda algoritmi etapid klassi ühes meetodis. See võimaldab piirata rakenduse konkreetseid toiminguid ühele meetodile.

Algoritmi iga samm, mille mallimeetod määratleb, on sisemine meetod. Mallmeetod tegeleb aga ainult mõne oma sisemise meetodi rakendamisega. Alamklassid rakendavad tavaliselt üht või mitut mallimeetodi sisemist meetodit.

Alamklass võib rakendada abstraktset meetodit, kuid see ei saa uuesti määratleda lõpliku meetodiga rakendatud algoritmi.

Kuidas mallimeetod töötab

Tüüpilise mallimeetodi mustri struktuur on järgmine:

lõpliktühinemallimeetod(){
abstraktneOperatsioon1();
abstraktneOperatsioon2();

konkreetneOperatsioon1();
konkreetneOperatsioon2();

konks();
}

Esimene oluline asi, mida tuleb tähele panna, on see, et templateMethod() on lõplik, nii et ükski alamklass ei saa seda meetodit alistada. Teine oluline asi, mida tuleb märkida, on kolme tüüpi meetodid, mida mallimeetodi muster kasutab: betoon, abstraktne ja konks.

Abstraktne klass, mis sisaldab mallimeetodit, rakendab kõiki oma konkreetseid meetodeid, samas kui konkreetsed alamklassid rakendavad selle abstraktseid meetodeid. Hook-meetod ei tee tavaliselt vaikimisi midagi, kuid alamklassil on võimalus need meetodid vajadusel alistada.

Malli meetodi mustri rakendamine Javas

Mallmeetodi muster toimib rakenduse raamistikuna. Seega näete seda mustrit sageli tarkvararaamistikes, mis pakuvad rakenduste arendamise kavandit.

Näiteks saate oma rakenduse ühendada ühega paljudest andmebaasisüsteemidest. Andmebaasi ühendamise ja kasutamise toimingud järgivad sarnast malli:

avalikabstraktneklassAndmebaas{
// malli meetod
lõpliktühineandmebaasi mall(){
// abstraktsed meetodid
setDBDriver();
setCredentials();

// konkreetne meetod
ühenda();

// abstraktsed meetodid
looDB();
setData();
readData();

// konks meetodid
if (userWantsToUpdate()) {
updateData();
}

if (userWantsToDelete()) {
kustutadaData();
}

// konkreetne meetod
closeConnection();
}

abstraktnetühinesetDBDriver();
abstraktnetühinemäära mandaadid();
abstraktnetühineloo DB();
abstraktnetühinesetData();
abstraktnetühineloe andmeid();
abstraktnetühineupdateData();
abstraktnetühineKustuta andmed();

tühineühendada(){
System.out.println("Ühenduse loomine andmebaasiga...");
}

tühinesulge ühendus(){
System.out.println("Andmebaasiühenduse hävitamine...");
}

tõeväärtususerWantsToUpdate(){
tagasivale;
}

tõeväärtususer WantsToDelete(){
tagasivale;
}
}

See näiteklass Database kasutab malli meetodi mustrit malli loomiseks, mida saate kasutada mis tahes andmebaasiga. Andmebaasi kasutamiseks peab teie rakendus sellega ühenduse looma ja pärast kasutamist ühenduse hävitama. Need tegevused on tavaliselt kõigi andmebaaside puhul samad. Seetõttu saab abstraktse andmebaasi klassi rakendada ühenda () ja closeConnection() meetodid.

Muud mallimeetodi meetodid erinevad sõltuvalt andmebaasi tüübist. Näiteks MySQL-i andmebaas salvestab andmed tabelitesse, samas kui a MongoDB andmebaas salvestab andmeid kogudesse. Kui soovite kasutada a MySQL andmebaas Javas, looge lihtsalt uus MySQL-klass, mis laiendab andmebaasiklassi:

avalikklassMySQLulatubAndmebaas{
@Alista
tühinesetDBDriver(){
System.out.println("MySQL draiveri valimine...");
}

@Alista
tühinemäära mandaadid(){
System.out.println("MySQL-i andmebaasi mandaadi määramine...");
}

@Alista
tühineloo DB(){
System.out.println("Uue tabeli loomine...");
}

@Alista
tühinesetData(){
System.out.println("Andmete sisestamine andmebaasi...");
}

@Alista
tühineloe andmeid(){
System.out.println("Andmete toomine andmebaasist...");
}

@Alista
tühineupdateData(){
System.out.println("Andmete värskendamine andmebaasis...");
}

@Alista
tühineKustuta andmed(){
System.out.println("Andmete kustutamine andmebaasist...");
}
}

MySQL-i klass rakendab kõiki andmebaasiklassi abstraktseid meetodeid. Samuti võib see tühistada mõned konkreetsed meetodid. Siiski ei saa see puudutada andmebaasMall() meetod, mis kasutab viimast märksõna.

avalikklassPeamine{
avalikstaatilinetühinepeamine(String[] args){
Andmebaas mySQLDB = uus MySQL();
mySQLDB.database Template();
}
}

See põhiklass loob uue MySQL-i andmebaasiobjekti ja kasutab mallimeetodit, et simuleerida, kuidas rakendus andmebaasiga ühenduse loob. Põhimeetodi käivitamisel prinditakse konsooli järgmine väljund:

Väljundis märkate, et rakendus ei helista kunagi updateData() ja deleteData() meetodid. Seetõttu on konksu meetodid olulised. SQL-andmebaasis soovite luua uusi tabeleid, sisestada andmeid ja vaadata oma andmeid. Siiski ei pruugi te soovida andmeid värskendada ega kustutada. Seetõttu annavad konksumeetodid alamklassidele võimaluse juhtida neid algoritmi kriitilisi aspekte.

@Alista
tõeväärtususerWantsToUpdate(){
tagasitõsi;
}

Lihtsalt lisades ülaltoodud koodi MySQL-i klassi, värskendab rakendus nüüd andmebaasis olevaid andmeid. Kui käivitate põhiklassi uuesti, kuvatakse järgmine värskendatud väljund:

Nagu näete, värskendab rakendus nüüd andmebaasis olevaid andmeid.

Mallmeetodi kujundusmustri kasutamise eelised

Mallmeetodi mustri peamine eelis on see, et see soodustab tarkvara korduvkasutatavust. See disainimuster toetab ka tõhusat programmeerimist. Alamklass peab rakendama ainult meetodeid, mis on selle toimimise jaoks ainulaadsed.

Lisaks on mallimeetodi mustrit kasutav rakendus turvalisem, kuna välised klassid ei saa selle tööstruktuuri muuta.