terminal

codeando_simple

terminal

menu

terminal

search_module

guest@codeandosimple: ~/system/search $ grep -r "" .

Press [ENTER] to execute search

Status

Engine: Ready

Database: Online

Index: V2.1.0_LATEST

bash — cat templatemethod.md
guest@codeandosimple: ~/blog/design-patterns $ cat templatemethod.md

Template Method_

// "La motivación es lo que te pone en marcha, el hábito es lo que hace que sigas" - Jim Ryun

# 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

Estructura UML Template Method

# 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.

Ejemplo Template Method Bebidas

# 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.