Az Önhöz hasonló olvasók támogatják a MUO-t. Amikor a webhelyünkön található linkek használatával vásárol, társult jutalékot kaphatunk.
A sablon metódus tervezési mintája lehetővé teszi egy algoritmus lépéseinek meghatározását egy osztály egyetlen metódusán belül. Ez lehetővé teszi, hogy egy alkalmazás meghatározott műveleteit egyetlen metódusra korlátozza.
Az algoritmus minden lépése, amelyet a sablon metódus definiál, egy belső metódus. A template metódus azonban csak néhány belső metódusának megvalósítását kezeli. Az alosztályok általában a template metódus egy vagy több belső metódusát valósítják meg.
Egy alosztály megvalósíthat egy absztrakt metódust, de nem tudja újradefiniálni a végső metódus által megvalósított algoritmust.
Hogyan működik a sablon módszer
Egy tipikus sablonmódszer minta a következő szerkezettel rendelkezik:
végsőüressablonMódszer(){
absztraktMűvelet1();
absztraktMűvelet2();konkrétMűvelet1();
konkrétMűvelet2();
horog();
}
Az első fontos dolog, amit meg kell jegyeznünk, hogy a templateMethod() végleges, így egyetlen alosztály sem bírálhatja felül ezt a metódust. A másik fontos dolog, amit meg kell jegyezni, az a háromféle módszer, amelyet a sablonmódszer-minta használ: konkrét, absztrakt és horog.
A template metódusnak helyet adó absztrakt osztály az összes konkrét metódusát megvalósítja, míg a konkrét alosztályok az absztrakt metódusait. A hook metódus alapértelmezés szerint általában nem csinál semmit, de egy alosztály képes felülírni ezeket a metódusokat, ha szükséges.
A sablon módszer minta implementálása Java nyelven
A sablon metódus mintája egy alkalmazás kereteként működik. Tehát gyakran látni fogja ezt a mintát azokban a szoftverkeretrendszerekben, amelyek az alkalmazásfejlesztés tervezetét adják.
Például csatlakoztathatja alkalmazását a sok adatbázisrendszer egyikéhez. Az adatbázishoz való csatlakozás és az adatbázis használatának lépései hasonló sablont követnek:
nyilvánosabsztraktosztályAdatbázis{
// sablon módszer
végsőüresadatbázissablon(){
// absztrakt módszerek
setDBDriver();
setCredentials();// konkrét módszer
connect();// absztrakt módszerek
createDB();
setData();
readData();// horog módszerek
if (userWantsToUpdate()) {
updateData();
}if (userWantsToDelete()) {
deleteData();
}// konkrét módszer
closeConnection();
}absztraktüressetDBDriver();
absztraktüressetCredentials();
absztraktüresCreateDB();
absztraktüressetData();
absztraktüresreadData();
absztraktüresupdateData();
absztraktüresdeleteData();ürescsatlakozni(){
System.out.println("Csatlakozás az adatbázishoz...");
}üresbezárja a kapcsolatot(){
System.out.println("Adatbázis-kapcsolat megsemmisítése...");
}logikai értékuserWantsToUpdate(){
Visszatéréshamis;
}
logikai értékuserWantsToDelete(){
Visszatéréshamis;
}
}
Ez a példa Database osztály a sablon metódusmintát használja bármilyen adatbázishoz használható sablon létrehozásához. Az adatbázis használatához az alkalmazásnak csatlakoznia kell hozzá, majd használat után meg kell semmisítenie a kapcsolatot. Ezek a tevékenységek általában minden adatbázisnál azonosak. Ezért az absztrakt Database osztály megvalósíthatja a connect() és closeConnection() mód.
A sablonmódszer többi módszere az adatbázis típusától függően eltérő lehet. Például egy MySQL adatbázis táblákban tárolja az adatokat, míg a A MongoDB adatbázis gyűjteményekben tárolja az adatokat. Ha szeretné használni a MySQL adatbázis Java nyelven, egyszerűen hozzon létre egy új MySQL osztályt, amely kiterjeszti az adatbázis osztályt:
nyilvánososztályMySQLkiterjedAdatbázis{
@Felülbírálás
üressetDBDriver(){
System.out.println("MySQL illesztőprogram kiválasztása...");
}@Felülbírálás
üressetCredentials(){
System.out.println("MySQL adatbázis hitelesítő adatainak beállítása...");
}@Felülbírálás
üresCreateDB(){
System.out.println("Új táblázat létrehozása...");
}@Felülbírálás
üressetData(){
System.out.println("Adatok beszúrása az adatbázisba...");
}@Felülbírálás
üresreadData(){
System.out.println("Adatok lekérése az adatbázisból...");
}@Felülbírálás
üresupdateData(){
System.out.println("Adatok frissítése az adatbázisban...");
}
@Felülbírálás
üresdeleteData(){
System.out.println("Adatok törlése az adatbázisból...");
}
}
A MySQL osztály a Database osztály összes absztrakt metódusát megvalósítja. Egyes konkrét módszereket is felülírhat. Azonban nem érintheti meg a adatbázissablon() módszerrel, amely a végső kulcsszót használja.
nyilvánososztályFő{
nyilvánosstatikusüresfő-(String[] args){
Adatbázis mySQLDB = új MySQL();
mySQLDB.databaseTemplate();
}
}
Ez a fő osztály új MySQL adatbázis-objektumot hoz létre, és a sablon módszert használja annak szimulálására, hogy egy alkalmazás hogyan csatlakozik az adatbázishoz. A fő módszer futtatása a következő kimenetet nyomtatja ki a konzolra:
A kimenetben észre fogja venni, hogy az alkalmazás soha nem hívja meg a updateData() és deleteData() mód. Ezért fontosak a horog módszerek. Az SQL-adatbázisban új táblákat kell létrehozni, adatokat beszúrni és megtekinteni az adatokat. Előfordulhat azonban, hogy nem szeretné frissíteni vagy törölni az adatokat. Ezért a hook metódusok lehetőséget adnak az alosztályoknak az algoritmus ezen kritikus szempontjainak szabályozására.
@Felülbírálás
logikai értékuserWantsToUpdate(){
Visszatérésigaz;
}
Egyszerűen hozzáadva a fenti kódot a MySQL osztályhoz, az alkalmazás frissíti az adatbázisban lévő adatokat. Ha újra futtatja a Main osztályt, a következő frissített kimenet jelenik meg:
Mint látható, az alkalmazás most frissíti az adatbázisban lévő adatokat.
A sablonmódszer tervezési minta használatának előnyei
A sablonmódszer-minta egyik fő előnye, hogy elősegíti a szoftverek újrafelhasználhatóságát. Ez a tervezési minta a hatékony programozást is támogatja. Egy alosztálynak csak olyan módszereket kell megvalósítania, amelyek egyediek a működésére.
Ezenkívül a sablonmetódusmintát használó alkalmazások biztonságosabbak, mivel a külső osztályok nem módosíthatják a működési struktúráját.