Čtenáři jako vy pomáhají podporovat MUO. Když provedete nákup pomocí odkazů na našich stránkách, můžeme získat provizi přidružené společnosti.
Vzor návrhu metody šablony vám umožňuje definovat kroky algoritmu v rámci jedné metody třídy. To vám umožňuje omezit konkrétní operace aplikace na jednu metodu.
Každý krok algoritmu, který definuje metoda šablony, je vnitřní metodou. Metoda šablony však zpracovává pouze implementaci některých jejích vnitřních metod. Podtřídy obvykle implementují jednu nebo více vnitřních metod metody šablony.
Podtřída může implementovat abstraktní metodu, ale nemůže předefinovat algoritmus implementovaný konečnou metodou.
Jak funguje metoda šablony
Typický vzor metody šablony bude mít následující strukturu:
fináleprázdnotašablonaMetoda(){
abstractOperation1();
abstractOperation2();betonOperace1();
betonOperace2();
háček();
}
První důležitá věc, kterou je třeba poznamenat, je, že templateMethod() je konečná, takže žádná podtřída nemůže tuto metodu přepsat. Další důležitou věcí, kterou je třeba poznamenat, jsou tři typy metod, které vzor metody šablony používá: konkrétní, abstraktní a hák.
Abstraktní třída, která obsahuje metodu šablony, implementuje všechny její konkrétní metody, zatímco konkrétní podtřídy implementují její abstraktní metody. Metoda háku obvykle ve výchozím nastavení nedělá nic, ale podtřída má schopnost tyto metody v případě potřeby přepsat.
Implementace vzoru metody šablony v Javě
Vzor metody šablony funguje jako rámec pro aplikaci. Tento vzor tedy často uvidíte v softwarových rámcích, které poskytují plán pro vývoj aplikací.
Svou aplikaci můžete například připojit k jednomu z mnoha databázových systémů. Kroky pro připojení a použití databáze se řídí podobnou šablonou:
veřejnostabstraktnítřídaDatabáze{
// metoda šablony
fináleprázdnotaŠablona databáze(){
// abstraktní metody
setDBDriver();
setCredentials();// konkrétní metoda
připojit();// abstraktní metody
createDB();
setData();
readData();// metody háku
if (userWantsToUpdate()) {
updateData();
}if (userWantsToDelete()) {
deleteData();
}// konkrétní metoda
closeConnection();
}abstraktníprázdnotasetDBDriver();
abstraktníprázdnotasetCredentials();
abstraktníprázdnotavytvořitDB();
abstraktníprázdnotasetData();
abstraktníprázdnotareadData();
abstraktníprázdnotaaktualizovat data();
abstraktníprázdnotadeleteData();prázdnotapřipojit(){
System.out.println("Připojování k databázi...");
}prázdnotazavřítPřipojení(){
System.out.println("Rušení připojení k databázi...");
}booleovskýuserWantsToUpdate(){
vrátit seNepravdivé;
}
booleovskýuserWantsToDelete(){
vrátit seNepravdivé;
}
}
Tato ukázková třída databáze používá vzor metody šablony k vytvoření šablony, kterou můžete použít s jakoukoli databází. Chcete-li použít databázi, vaše aplikace se k ní bude muset připojit a po použití připojení zrušit. Tyto činnosti jsou obvykle stejné pro všechny databáze. Proto může abstraktní třída Database implementovat připojit() a closeConnection() metody.
Ostatní metody v metodě šablony se budou lišit v závislosti na typu databáze. Například databáze MySQL ukládá data v tabulkách, zatímco a Databáze MongoDB ukládá data do kolekcí. Pokud chcete použít a MySQL databáze v Javě, jednoduše vytvořte novou třídu MySQL, která rozšiřuje třídu Database:
veřejnosttřídaMySQLrozšiřujeDatabáze{
@Přepsat
prázdnotasetDBDriver(){
System.out.println("Výběr ovladače MySQL...");
}@Přepsat
prázdnotasetCredentials(){
System.out.println("Nastavení přihlašovacích údajů k databázi MySQL...");
}@Přepsat
prázdnotavytvořitDB(){
System.out.println("Vytváření nové tabulky...");
}@Přepsat
prázdnotasetData(){
System.out.println("Vkládání dat do databáze...");
}@Přepsat
prázdnotareadData(){
System.out.println("Načítání dat z databáze...");
}@Přepsat
prázdnotaaktualizovat data(){
System.out.println("Aktualizace dat v databázi...");
}
@Přepsat
prázdnotadeleteData(){
System.out.println("Mazání dat z databáze...");
}
}
Třída MySQL implementuje všechny abstraktní metody třídy Database. Může také přepsat některé konkrétní metody. Nemůže se však dotknout databaseTemplate() metoda, která používá konečné klíčové slovo.
veřejnosttřídaHlavní{
veřejnoststatickýprázdnotahlavní(Řetězec[] argumentů){
Databáze mySQLDB = Nový MySQL();
mySQLDB.databaseTemplate();
}
}
Tato třída Main vytváří nový databázový objekt MySQL a používá metodu šablony k simulaci toho, jak by se aplikace připojovala k databázi. Spuštění hlavní metody vytiskne na konzolu následující výstup:
Ve výstupu si všimnete, že aplikace nikdy nevolá updateData() a deleteData() metody. To je důvod, proč jsou metody háku důležité. V databázi SQL budete chtít vytvářet nové tabulky, vkládat data a zobrazovat svá data. Možná však nebudete chtít aktualizovat nebo odstranit data. Proto hákové metody dávají podtřídám možnost řídit tyto kritické aspekty algoritmu.
@Přepsat
booleovskýuserWantsToUpdate(){
vrátit seskutečný;
}
Pouhým přidáním výše uvedeného kódu do třídy MySQL nyní aplikace aktualizuje data v databázi. Pokud znovu spustíte třídu Main, zobrazí se následující aktualizovaný výstup:
Jak vidíte, aplikace nyní aktualizuje data v Databázi.
Výhody použití návrhového vzoru metody šablony
Hlavní výhodou vzoru metody šablony je to, že podporuje opětovné použití softwaru. Tento návrhový vzor také podporuje efektivní programování. Podtřída potřebuje pouze implementovat metody, které jsou jedinečné pro její provoz.
Aplikace, která používá vzor metody šablony, je navíc bezpečnější, protože externí třídy nemohou změnit její operační strukturu.