Template Method: definición de esqueletos de algoritmos
Defina el esqueleto de un algoritmo en una clase base y permita que las subclases completen los pasos.
Template Method: definición de esqueletos de algoritmos es una lección gratuita de Java Academy en CoddyKit. Esta es la lección 4 de 4. Puedes leer la lección completa abajo gratuitamente — luego la practicas en el navegador con un editor de código integrado y un tutor de IA 24/7. Forma parte de la ruta de aprendizaje de Java Academy, y tu progreso se sincroniza en la web y la app de CoddyKit. El curso de Java Academy incluye 4 lecciones en total.
La intención de Template Method
Template Method define el esqueleto de un algoritmo en una clase base y delega algunos pasos en las subclases. Las subclases pueden sobrescribir pasos sin cambiar la estructura general.
La clase base abstracta
La clase base contiene el método plantilla (normalmente final) que coordina los pasos. Los métodos abstractos representan los pasos variables. Los métodos concretos proporcionan el comportamiento predeterminado.
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)");
}
}Subclases concretas
Cada subclase implementa los pasos abstractos. La secuencia del método plantilla nunca cambia; solo varía la implementación de cada paso.
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."); }
}Métodos hook
Un hook es un paso opcional con una implementación predeterminada, a menudo vacía. Las subclases pueden sobrescribir los hooks para añadir comportamiento opcional sin verse obligadas a implementarlo.
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 frente a Strategy
Template Method utiliza herencia: el esqueleto es fijo en la clase base y las subclases sobrescriben los pasos. Strategy utiliza composición: el algoritmo completo es externo. Strategy es más flexible; Template Method es más sencillo cuando los pasos comparten mucho contexto.
InputStream de Java como Template Method
El método read(byte[], int, int) de java.io.InputStream está implementado en términos del método abstracto read(). Las subclases implementan la versión de un byte; la lectura de varios bytes es el método plantilla.
Template Method para generar informes
Defina una plantilla de informe: recopile los datos, déles formato y muéstrelos. Sustituya las subclases para generar salida en PDF, HTML o CSV sin cambiar la lógica de coordinación.
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
}Impedir la sobrescritura de la plantilla
Declare el método plantilla como final para impedir que las subclases alteren la estructura del algoritmo. Solo los métodos hook y abstractos deberían poder sobrescribirse.
public final void process() {
validate(); // abstract
execute(); // abstract
cleanup(); // hook with default
}Pasos abstractos frente a concretos
Haga que un paso sea abstracto cuando la subclase deba proporcionarlo. Hágalo concreto (posiblemente vacío) cuando las subclases puedan sobrescribirlo para personalizarlo.
Template Method en JUnit
setUp() y tearDown() de JUnit 4 son hooks del método plantilla definido por el ejecutor de pruebas. El ejecutor controla cuándo se llaman.
Template Method en Spring
JdbcTemplate de Spring utiliza internamente Template Method. La plantilla controla la conexión, la creación de la sentencia y la limpieza; usted proporciona una lambda RowMapper para el paso variable de «mapear la fila».
List<User> users = jdbcTemplate.query(
"SELECT * FROM users",
(rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);Evitar la herencia profunda
Template Method depende de la herencia, lo que puede producir jerarquías de clases profundas. Limítese a 1 o 2 niveles. Si las subclases empiezan a sobrescribir muchos pasos de formas distintas, considere cambiar a Strategy.
Comprobación rápida
¿Qué palabra clave impide que las subclases cambien la secuencia del método plantilla?
Resumen
Template Method fija el esqueleto del algoritmo en una clase base mediante final. Las subclases implementan los pasos abstractos y, opcionalmente, sobrescriben los hooks. Mantenga las jerarquías poco profundas; utilice Strategy cuando necesite más flexibilidad.
Aprende Java con un tutor de IA — gratis
Escribe y ejecuta código real en tu navegador, obtén ayuda instantánea de un tutor de IA disponible 24/7 y continúa donde lo dejaste en la web o en la aplicación.
- Cursos
- 104
- Lecciones
- 374
Preguntas frecuentes
¿La lección «Template Method: definición de esqueletos de algoritmos» es gratis?
Sí — el texto completo de «Template Method: definición de esqueletos de algoritmos» es gratis para leer aquí en la web. Para practicarla de forma interactiva (editor de código integrado y tutor de IA 24/7) y desbloquear el resto del curso de Java Academy, actualiza a CoddyKit PRO. El curso de Java Academy incluye 4 lecciones en total.
¿Qué aprenderé en «Template Method: definición de esqueletos de algoritmos»?
Defina el esqueleto de un algoritmo en una clase base y permita que las subclases completen los pasos. Practicas Java Academy con código real que ejecutas directamente en el navegador, y un tutor de IA 24/7 responde tus preguntas mientras trabajas en la lección.
¿Necesito experiencia previa para empezar Java Academy?
No se requiere experiencia previa. Java Academy en CoddyKit está estructurado para principiantes hasta estudiantes avanzados, así que puedes empezar aquí o desde el inicio y avanzar a tu ritmo. Esta es la lección 4 de 4.
¿Cuánto tiempo toma la lección «Template Method: definición de esqueletos de algoritmos»?
La mayoría de las lecciones de CoddyKit toman alrededor de 5–10 minutos. Cada una es compacta e interactiva, así que avanzas constantemente y retomas exactamente por donde dejaste en la web y la app.
¿Puedo escribir y ejecutar código en esta lección de Java Academy?
Sí. Cada lección de Java Academy incluye un editor de código integrado, así que escribes y ejecutas código real directamente en tu navegador y obtienes retroalimentación instantánea de IA — sin configuración local necesaria.
Todas las lecciones de este curso
- Patrón Observer: notificación de eventos
- Patrón Strategy: algoritmos intercambiables
- Patrón Command: encapsulación de acciones
- Template Method: definición de esqueletos de algoritmos