Template Method
Define el esqueleto de un algoritmo en una clase base, dejando ciertos pasos a las subclases.
Contexto
Tienes varios algoritmos con la misma estructura pero pasos específicos distintos (parsear, validar, exportar).
Problema
Duplicas el esqueleto en cada implementación.
Solución
La clase base define el método Run() con el orden y llama a hooks abstractos que las subclases rellenan.
#Ejemplo en C#
public abstract class ReportGenerator
{
public string Generate() // template
{
var data = LoadData();
var processed = Process(data);
return Format(processed);
}
protected abstract IEnumerable<Row> LoadData();
protected virtual IEnumerable<Row> Process(IEnumerable<Row> rows) => rows; // hook
protected abstract string Format(IEnumerable<Row> rows);
}
public class CsvReport : ReportGenerator
{
protected override IEnumerable<Row> LoadData() => /* desde DB */;
protected override string Format(IEnumerable<Row> rows) => /* CSV */;
}Cuándo NO aplicarlo
Si los pasos son muy distintos por implementación: prefiere Strategy (composición sobre herencia).
Tradeoffs
| Pro | Contra |
|---|---|
| Reusa el esqueleto | Acopla por herencia (rígido) |
#behavioral #gof #inheritance