Vad är mallmetodens designmönster?

Vad är mallmetodens designmönster?
Läsare som du hjälper till att stödja MUO. När du gör ett köp med hjälp av länkar på vår webbplats kan vi tjäna en affiliate-provision.

Mallmetodens designmönster låter dig definiera stegen för en algoritm inom en enda metod i en klass. Detta gör att du kan begränsa specifika operationer för en applikation till en enda metod.





Varje steg i algoritmen som mallmetoden definierar är en inre metod. Mallmetoden hanterar dock bara implementeringen av några av dess inre metoder. Underklasser implementerar vanligtvis en eller flera av mallmetodens inre metoder.





MAKEUSE AV DAGENS VIDEO

En underklass kan implementera en abstrakt metod, men den kan inte omdefiniera algoritmen som implementeras av en slutlig metod.





Hur mallmetoden fungerar

Ett typiskt mallmetodmönster kommer att ha följande struktur:

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

concreteOperation1();
concreteOperation2();

hook();
}

Det första viktiga att notera är att templateMethod() är final, så ingen underklass kan åsidosätta denna metod. Det andra viktiga att notera är de tre typerna av metoder som mallmetodens mönster använder: konkret, abstrakt och krok.



hur varmt ska min cpu bli

Den abstrakta klassen som innehåller mallmetoden implementerar alla dess konkreta metoder, medan konkreta underklasser implementerar dess abstrakta metoder. Hookmetoden gör vanligtvis ingenting som standard, men en underklass har förmågan att åsidosätta dessa metoder när det behövs.

Implementera mallmetoden i Java

Mallmetodmönstret fungerar som ett ramverk för en applikation. Så du kommer ofta att se det här mönstret i mjukvaruramverk som tillhandahåller ritningen för applikationsutveckling.





Du kan till exempel koppla din applikation till ett av många databassystem. Stegen för att ansluta till och använda en databas följer en liknande mall:

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;
}
}

Denna exempeldatabasklass använder mallmetodens mönster för att skapa en mall som du kan använda med vilken databas som helst. För att använda en databas måste din applikation ansluta till den och sedan förstöra anslutningen efter användning. Dessa aktiviteter är vanligtvis desamma för alla databaser. Därför kan den abstrakta databasklassen implementera ansluta() och closeConnection() metoder.





De andra metoderna i mallmetoden kommer att skilja sig beroende på typen av databas. Till exempel lagrar en MySQL-databas data i tabeller, medan en MongoDB databas lagrar data i samlingar . Om du vill använda en MySQL-databas i Java , skapa helt enkelt en ny MySQL-klass som utökar databasklassen:

Windows 10 -skärmen är upp och ner
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-klassen implementerar alla abstrakta metoder i Databasklassen. Det kan också åsidosätta vissa konkreta metoder. Den kan dock inte röra databaseTemplate() metod, som använder det sista nyckelordet.

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

Denna Main-klass skapar ett nytt MySQL-databasobjekt och använder mallmetoden för att simulera hur en applikation skulle ansluta till databasen. Genom att köra huvudmetoden skrivs följande ut till konsolen:

  MySQL-databasmallmetod

I utgången kommer du att märka att applikationen aldrig anropar uppdatera data() och deleteData() metoder. Det är därför krokmetoderna är viktiga. I en SQL-databas vill du skapa nya tabeller, infoga data och visa dina data. Däremot kanske du inte vill uppdatera eller radera data. Därför ger hook-metoderna underklasser möjlighet att kontrollera dessa kritiska aspekter av algoritmen.

@Override 
boolean userWantsToUpdate() {
return true;
}

Genom att helt enkelt lägga till koden ovan i MySQL-klassen uppdaterar applikationen nu data i databasen. Om du kör huvudklassen igen kommer den att visa följande uppdaterade utdata:

  Uppdatering av metod för MySQL-databasmall

Som du kan se uppdaterar applikationen nu data i databasen.

Fördelarna med att använda mallmetodens designmönster

En stor fördel med mallmetodens mönster är att det främjar återanvändbarhet av programvara. Detta designmönster stöder också effektiv programmering. En underklass behöver bara implementera metoder som är unika för dess verksamhet.

Dessutom är en applikation som använder mallmetodens mönster säkrare, eftersom externa klasser inte kan ändra dess operationsstruktur.