# Propósito
El patrón Template Method (Método Plantilla) define el esqueleto de un algoritmo en una operación, delegando algunos pasos a las subclases.
# Problema
-
Redundancia: Repetición de lógica común entre varias clases que procesan flujos casi idénticos.
-
Fragilidad: Dificultad para garantizar que todas las variantes sigan los mismos pasos de control.
# Solución
Crear una clase base con un método final (la plantilla) que invoca métodos abstractos. Las subclases rellenan los huecos sin cambiar el flujo.
# Estructura
# Participantes
- AbstractClass: Define la plantilla y pasos base.
- ConcreteClass: Implementa pasos específicos del algoritmo.
# Cuándo Usarlo
Cuando tienes una receta fija para un proceso pero ingredientes que cambian según el contexto o tipo de producto.
# Ventajas
-
verified
DRY: Centraliza el código común en la superclase.
-
verified
Control: La estructura del algoritmo es inmutable en las subclases.
# Desventajas
-
warning
Rigidez: Las subclases están atadas a la estructura de la clase base.
-
warning
LSP: Riesgo de violar el principio de reemplazo si no se implementa con cuidado.
# Ejemplo: Preparación de Bebidas
Pasos comunes para Té y Café (Hervir, Servir) pero preparación e ingredientes específicos para cada uno.
# Código Java
abstract class DrinkTemplate {
final void prepare() { boil(); brew(); pour(); }
abstract void brew();
void boil() { System.out.println("Hirviendo"); }
}
class Coffee extends DrinkTemplate {
void brew() { System.out.println("Filtrando café"); }
}
# Mapeo Participantes
- HotBeverageTemplate: AbstractClass.
- Tea/Coffee: ConcreteClasses.
- BeverageMaker: Client.
# Conclusiones
Asegura que todos los subtipos de un proceso sigan el mismo protocolo, permitiendo especializaciones limpias y centralizadas.
# Patrones relacionados
Factory Method
A menudo se usa dentro de un Template Method para instanciar objetos.
Strategy
Template Method varía partes con herencia, Strategy varía el algoritmo completo con delegación.