Java Academy · Lección

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.

Lección 4 de 414 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.

Gratis para empezar

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

  1. Patrón Observer: notificación de eventos
  2. Patrón Strategy: algoritmos intercambiables
  3. Patrón Command: encapsulación de acciones
  4. Template Method: definición de esqueletos de algoritmos
← Volver a Java Academy