Mis on mallimeetodi kujundamise muster?

Mis on mallimeetodi kujundamise muster?
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.





Windows 10 seadis taustaks gif -i
PÄEVA VIDEO MAKKEUSE

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:

final void templateMethod() { 
abstractOperation1();
abstractOperation2();

concreteOperation1();
concreteOperation2();

hook();
}

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 selle 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:

public abstract class Database { 
// template method
final void databaseTemplate() {
// abstract methods
setDBDriver();
setCredentials();

// concrete method
connect();

// abstract methods
createDB();
setData();
readData();

// hook methods
if (userWantsToUpdate()) {
updateData();
}

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

// concrete method
closeConnection();
}

abstract void setDBDriver();
abstract void setCredentials();
abstract void createDB();
abstract void setData();
abstract void readData();
abstract void updateData();
abstract void deleteData();

void connect() {
System.out.println("Connecting to database...");
}

void closeConnection() {
System.out.println("Destroying database connection...");
}

boolean userWantsToUpdate() {
return false;
}

boolean userWantsToDelete() {
return false;
}
}

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:

public class MySQL extends Database { 
@Override
void setDBDriver() {
System.out.println("Selecting MySQL driver...");
}

@Override
void setCredentials() {
System.out.println("Setting MySQL database Credential...");
}

@Override
void createDB() {
System.out.println("Creating a new table...");
}

@Override
void setData() {
System.out.println("Inserting data into database...");
}

@Override
void readData() {
System.out.println("Retrieving data from database...");
}

@Override
void updateData() {
System.out.println("Updating data in database...");
}

@Override
void deleteData() {
System.out.println("Deleting data from database...");
}
}

MySQL-i klass rakendab kõiki andmebaasiklassi abstraktseid meetodeid. See võib alistada ka mõned konkreetsed meetodid. Siiski ei saa see puudutada andmebaasMall() meetod, mis kasutab lõplikku märksõna.

public class Main { 
public static void main(String[] args) {
Database mySQLDB = new MySQL();
mySQLDB.databaseTemplate();
}
}

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:

  MySQL andmebaasi malli meetod

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.

@Override 
boolean userWantsToUpdate() {
return true;
}

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:

  MySQL andmebaasi malli meetodi värskendus

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.

minu iphone ei saa arvutiga ühendust

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