Patrón Template Method

PUBLICADO: 2026-08-17
AUTOR: MANUEL PRIETO
Patrones de Diseño

💡 Ver Caso Práctico: Ejemplo Práctico del Patrón Template Method

Template Method (Método Plantilla) es un patrón de diseño comportamental que define el esqueleto de un algoritmo en la superclase, dejando que las subclases sobrescriban pasos concretos sin cambiar la estructura general.

Propósito y Caso de Uso

Utiliza Template Method cuando varios algoritmos comparten la misma secuencia de pasos pero difieren en la implementación de algunos de ellos (ej. distintos formatos de exportación: PDF, CSV, Excel, todos con "cargar datos → transformar → escribir cabecera → escribir filas"). A diferencia de Strategy (que delega el algoritmo completo a un objeto externo), Template Method usa herencia y fija el flujo en la clase base.

Estructura del Patrón

  1. Clase Abstracta: Define el método plantilla (execute()) que orquesta los pasos en orden fijo, y deja algunos como abstractos.
  2. Subclases Concretas: Implementan únicamente los pasos variables, heredando el resto del flujo.
  3. Pasos Opcionales (Hooks): Métodos con implementación por defecto que las subclases pueden sobrescribir si lo necesitan.
Cargando diagrama...

Flujo de Funcionamiento

  1. Invocación única: El cliente llama al método plantilla de la clase base.
  2. Ejecución en orden fijo: La clase base recorre los pasos definidos, algunos propios y otros delegados.
  3. Personalización por subclase: Cada paso abstracto es resuelto por la subclase concreta usada.

Ejemplos de Implementación Reales

Cuándo NO usarlo

Si los algoritmos no comparten estructura común, o se necesita cambiar el algoritmo completo en tiempo de ejecución (no solo pasos), usa mejor Strategy (YAGNIGlosarioYAGNI (You Aren't Gonna Need It)Principio de Extreme Programming (XP) que establece que un programador no debe añadir funcionalidad hasta que sea estrictamente necesario. Su objetivo es evitar la sobre-ingeniería (over-engineering), previniendo código para funcionalidades hipotéticas.Ver término completo →).