Template Method: definiowanie szkieletów algorytmów
Zdefiniuj szkielet algorytmu w klasie bazowej i pozwól klasom pochodnym uzupełnić poszczególne kroki.
Template Method: definiowanie szkieletów algorytmów to bezpłatna lekcja Java Academy na CoddyKit. To lekcja 4 z 4. Możesz przeczytać całą lekcję poniżej za darmo — a potem ćwiczyć ją interaktywnie w przeglądarce z wbudowanym edytorem kodu i tutorem AI dostępnym 24/7. To część ścieżki edukacyjnej Java Academy, a Twój postęp synchronizuje się między webem a aplikacją CoddyKit. Kurs Java Academy zawiera 4 lekcji w sumie.
Intencja wzorca Metoda szablonowa
Wzorzec Metoda szablonowa definiuje szkielet algorytmu w klasie bazowej, pozostawiając część kroków podklasom. Podklasy mogą nadpisywać kroki bez zmieniania ogólnej struktury.
Abstrakcyjna klasa bazowa
Klasa bazowa zawiera metodę szablonową, zwykle oznaczoną jako final, która koordynuje kroki. Metody abstrakcyjne reprezentują zmienne kroki. Metody konkretne zapewniają domyślne działanie.
public abstract class DataProcessor {
// Template method — final, defines the algorithm
public final void process() {
readData();
processData();
writeResult();
}
protected abstract void readData();
protected abstract void processData();
protected void writeResult() {
System.out.println("Result written (default)");
}
}Konkretne podklasy
Każda podklasa implementuje kroki abstrakcyjne. Kolejność w metodzie szablonowej nigdy się nie zmienia — zmieniają się tylko implementacje poszczególnych kroków.
public class CSVProcessor extends DataProcessor {
protected void readData() { System.out.println("Reading CSV..."); }
protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
protected void readData() { System.out.println("Reading XML..."); }
protected void processData() { System.out.println("Parsing XML nodes..."); }
@Override
protected void writeResult() { System.out.println("Writing XML result."); }
}Metody hakowe
Hak jest opcjonalnym krokiem z domyślną, często pustą implementacją. Podklasy mogą nadpisywać haki, aby dodawać opcjonalne zachowanie bez konieczności ich implementowania.
public abstract class Game {
public final void play() {
initialize();
while (!isDone()) takeTurn();
printWinner();
}
protected void initialize() {} // hook — optional override
protected abstract boolean isDone();
protected abstract void takeTurn();
protected abstract void printWinner();
}Metoda szablonowa a Strategia
Metoda szablonowa korzysta z dziedziczenia: szkielet jest ustalony w klasie bazowej, a kroki są nadpisywane w podklasach. Strategia korzysta z kompozycji: cały algorytm znajduje się na zewnątrz. Strategia jest bardziej elastyczna, a Metoda szablonowa prostsza, gdy kroki współdzielą duży kontekst.
Java InputStream jako metoda szablonowa
Metoda read(byte[], int, int) w java.io.InputStream jest zaimplementowana w kategoriach abstrakcyjnej metody read(). Podklasy implementują wersję jednobajtową, a odczyt wielobajtowy stanowi szablon.
Metoda szablonowa do generowania raportów
Należy zdefiniować szablon raportu: zebrać dane, sformatować je i wygenerować wynik. Podklasy można wymieniać na potrzeby formatu PDF, HTML lub CSV bez zmieniania logiki koordynacji.
public abstract class ReportGenerator {
public final String generate() {
List<Record> data = fetchData();
String body = format(data);
return wrap(body);
}
protected abstract List<Record> fetchData();
protected abstract String format(List<Record> data);
protected String wrap(String body) { return body; } // hook
}Zapobieganie nadpisywaniu metody szablonowej
Należy zadeklarować metodę szablonową jako final, aby uniemożliwić podklasom zmianę struktury algorytmu. Nadpisywane powinny być wyłącznie haki i metody abstrakcyjne.
public final void process() {
validate(); // abstract
execute(); // abstract
cleanup(); // hook with default
}Kroki abstrakcyjne a konkretne
Krok powinien być abstrakcyjny, gdy musi zostać dostarczony przez podklasę. Należy uczynić go konkretnym, możliwie z pustą implementacją, gdy podklasy mogą go nadpisać w celu dostosowania.
Metoda szablonowa w JUnit
setUp() i tearDown() w JUnit 4 są hakami w metodzie szablonowej zdefiniowanej przez program uruchamiający testy. Program uruchamiający kontroluje moment ich wywołania.
Metoda szablonowa w Spring
JdbcTemplate w Spring korzysta wewnętrznie z wzorca Metoda szablonowa. Szablon kontroluje połączenie, tworzenie instrukcji i czyszczenie zasobów, a Państwo dostarczają lambdę RowMapper dla zmiennego kroku „mapowania wiersza”.
List<User> users = jdbcTemplate.query(
"SELECT * FROM users",
(rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);Unikanie głębokiego dziedziczenia
Metoda szablonowa opiera się na dziedziczeniu, które może prowadzić do głębokich hierarchii klas. Należy ograniczyć je do 1–2 poziomów. Jeśli podklasy zaczną różnie nadpisywać wiele kroków, warto rozważyć przejście na Strategię.
Szybkie sprawdzenie
Jakie słowo kluczowe uniemożliwia podklasom zmianę kolejności kroków metody szablonowej?
Podsumowanie
Metoda szablonowa blokuje szkielet algorytmu w klasie bazowej za pomocą final. Podklasy implementują kroki abstrakcyjne i opcjonalnie nadpisują haki. Hierarchie powinny być płytkie, a gdy potrzebna jest większa elastyczność, należy użyć Strategii.
Często zadawane pytania
Czy lekcja „Template Method: definiowanie szkieletów algorytmów” jest bezpłatna?
Tak — pełny tekst „Template Method: definiowanie szkieletów algorytmów” jest dostępny za darmo tutaj w sieci. Aby ćwiczyć ją interaktywnie (wbudowany edytor kodu i tutor AI dostępny 24/7) i odblokować resztę kursu Java Academy, przejdź na CoddyKit PRO. Kurs Java Academy zawiera 4 lekcji w sumie.
Co nauczysz się w „Template Method: definiowanie szkieletów algorytmów”?
Zdefiniuj szkielet algorytmu w klasie bazowej i pozwól klasom pochodnym uzupełnić poszczególne kroki. Ćwiczysz Java Academy z praktycznym kodem, który uruchamiasz bezpośrednio w przeglądarce, a tutor AI dostępny 24/7 odpowiada na Twoje pytania podczas pracy nad lekcją.
Czy potrzebuję doświadczenia, aby zacząć Java Academy?
Nie wymagamy żadnego doświadczenia. Java Academy w CoddyKit jest strukturyzowany dla początkujących i zaawansowanych użytkowników, więc możesz zacząć tutaj lub od początku i uczyć się w swoim tempie. To lekcja 4 z 4.
Ile czasu zajmuje lekcja „Template Method: definiowanie szkieletów algorytmów”?
Większość lekcji CoddyKit trwa około 5–10 minut. Każda lekcja to mały, interaktywny krok, dzięki czemu robisz systematyczne postępy i zawsze wracasz dokładnie do tego samego miejsca — na webie i w aplikacji.
Czy mogę pisać i uruchamiać kod w tej lekcji Java Academy?
Tak. Każda lekcja Java Academy zawiera wbudowany edytor kodu, więc piszesz i uruchamiasz prawdziwy kod bezpośrednio w przeglądarce i od razu otrzymujesz sprzężenie zwrotne od AI — bez konfiguracji na komputerze.
Wszystkie lekcje w tym kursie
- Wzorzec Observer: powiadamianie o zdarzeniach
- Wzorzec Strategy: wymienne algorytmy
- Wzorzec Command: hermetyzowanie akcji
- Template Method: definiowanie szkieletów algorytmów