Template Method: algoritmien rungot
Määritä algoritmin runko kantaluokassa ja anna aliluokkien täyttää sen vaiheet.
Template Method: algoritmien rungot on ilmainen Java Academy-oppitunti CoddyKitissä. Tämä on oppitunti 4/4. Voit lukea koko oppitunnin alta ilmaiseksi ja harjoitella sen jälkeen käytännössä selaimessa sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla. Oppitunti kuuluu Java Academy-oppimispolkuun, ja edistymisesi synkronoituu verkon ja CoddyKit-sovelluksen välillä. Java Academy-kurssilla on yhteensä 4 oppituntia.
Template Method -kuvion tarkoitus
Template Method määrittelee algoritmin rungon perusluokassa ja jättää osan vaiheista aliluokkien toteutettaviksi. Aliluokat voivat korvata vaiheita muuttamatta kokonaisrakennetta.
Abstrakti perusluokka
Perusluokassa on template-metodi, joka on yleensä final ja ohjaa vaiheiden suorittamista. Abstraktit metodit edustavat vaihtelevia vaiheita. Konkreettiset metodit tarjoavat oletustoiminnan.
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)");
}
}Konkreettiset aliluokat
Kukin aliluokka toteuttaa abstraktit vaiheet. Template-metodin järjestys ei koskaan muutu — vain yksittäisten vaiheiden toteutukset vaihtelevat.
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."); }
}Hook-metodit
Hook on valinnainen vaihe, jolla on oletustoteutus, usein tyhjä. Aliluokat voivat korvata hook-metodeja lisätäkseen valinnaista toimintaa ilman, että niiden on pakko toteuttaa sitä.
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();
}Template Method ja Strategy
Template Method käyttää perintää: runko on kiinteä perusluokassa ja vaiheet korvataan aliluokissa. Strategy käyttää koostamista: koko algoritmi on perusluokan ulkopuolella. Strategy on joustavampi, kun taas Template Method on yksinkertaisempi, jos vaiheet jakavat paljon kontekstia.
Javan InputStream Template Methodina
java.io.InputStream-luokan read(byte[], int, int) on toteutettu abstraktin read()-metodin avulla. Aliluokat toteuttavat yhden tavun version, ja usean tavun luku toimii templaattina.
Template Method raporttien tuottamiseen
Määritelkää raporttitemplaatti: kerätkää tiedot, muotoilkaa ne ja tulostakaa ne. Vaihtakaa aliluokkia PDF-, HTML- tai CSV-tulostusta varten muuttamatta koordinointilogiikkaa.
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
}Templaatin ylikirjoituksen estäminen
Merkitkää template-metodi määreellä final, jotta aliluokat eivät voi muuttaa algoritmin rakennetta. Vain hook- ja abstraktit metodit saavat olla ylikirjoitettavissa.
public final void process() {
validate(); // abstract
execute(); // abstract
cleanup(); // hook with default
}Abstraktit ja konkreettiset vaiheet
Tehkää vaiheesta abstrakti, kun aliluokan on toteutettava se. Tehkää siitä konkreettinen, mahdollisesti tyhjä, kun aliluokat voivat ylikirjoittaa sen mukauttamista varten.
Template Method JUnitissa
JUnit 4:n setUp() ja tearDown() ovat hook-metodeja testiajon suorittajan määrittelemässä template-metodissa. Suorittaja hallitsee, milloin niitä kutsutaan.
Template Method Springissä
Springin JdbcTemplate käyttää sisäisesti Template Methodia. Template ohjaa yhteyttä, lauseen luontia ja siivousta; te toimitatte RowMapper-lambdan vaihtelevaa ”map row” -vaihetta varten.
List<User> users = jdbcTemplate.query(
"SELECT * FROM users",
(rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);Välttäkää syvää perintähierarkiaa
Template Method perustuu perintään, joka voi tuottaa syviä luokkahierarkioita. Rajoittakaa hierarkia 1–2 tasoon. Jos aliluokat alkavat ylikirjoittaa monia vaiheita eri tavoin, harkitkaa vaihtamista Strategyyn.
Pikatarkistus
Mikä avainsana estää aliluokkia muuttamasta template-metodin vaiheiden järjestystä?
Kertaus
Template Method lukitsee algoritmin rungon perusluokkaan määreellä final. Aliluokat toteuttavat abstraktit vaiheet ja voivat halutessaan ylikirjoittaa hook-metodeja. Pitäkää hierarkiat matalina ja käyttäkää Strategya, kun tarvitaan enemmän joustavuutta.
Opi Java tekoälytuutorin avulla — ilmaiseksi
Kirjoita ja suorita oikeaa koodia selaimessa, saa välitöntä apua tekoälytuutorilta ympäri vuorokauden ja jatka siitä, mihin jäit, verkossa tai sovelluksessa.
- Kurssit
- 104
- Oppitunnit
- 374
Usein kysytyt kysymykset
Onko oppitunti ”Template Method: algoritmien rungot” ilmainen?
Kyllä – oppitunnin ”Template Method: algoritmien rungot” koko tekstin voi lukea täällä verkossa ilmaiseksi. Jos haluat harjoitella interaktiivisesti sisäänrakennetulla koodieditorilla ja ympäri vuorokauden käytettävissä olevan tekoälytuutorin avulla sekä avata koko Java Academy-kurssin, päivitä CoddyKit PROhon. Java Academy-kurssilla on yhteensä 4 oppituntia.
Mitä opin oppitunnilla ”Template Method: algoritmien rungot”?
Määritä algoritmin runko kantaluokassa ja anna aliluokkien täyttää sen vaiheet. Harjoittelet Java Academy-aihetta koodilla, jonka suoritat suoraan selaimessa. Ympäri vuorokauden käytettävissä oleva tekoälytuutori vastaa kysymyksiisi oppitunnin aikana.
Tarvitsenko kokemusta aloittaakseni Java Academy-opiskelun?
Aiempi kokemus ei ole tarpeen. CoddyKitin Java Academy-oppimispolku sopii vasta-alkajista edistyneisiin, joten voit aloittaa tästä tai alusta ja edetä omaan tahtiisi. Tämä on oppitunti 4/4.
Kuinka kauan ”Template Method: algoritmien rungot”-oppitunnin suorittaminen kestää?
Useimmat CoddyKitin oppitunnit kestävät noin 5–10 minuuttia. Jokainen oppitunti on lyhyt ja interaktiivinen, joten edistyt tasaisesti ja voit jatkaa siitä, mihin jäit – sekä verkossa että sovelluksessa.
Voinko kirjoittaa ja suorittaa koodia tällä Java Academy-oppitunnilla?
Kyllä. Jokainen Java Academy-oppitunti sisältää sisäänrakennetun koodieditorin, joten voit kirjoittaa ja suorittaa oikeaa koodia suoraan selaimessa ja saada välitöntä palautetta tekoälyltä – paikallista asennusta ei tarvita.
Kaikki tämän kurssin oppitunnit
- Observer-malli: tapahtumailmoitukset
- Strategy-malli: vaihdettavat algoritmit
- Command-malli: toimintojen kapselointi
- Template Method: algoritmien rungot