Por que esse padrão existe?
Importar dados de diferentes formatos pode sempre exigir abrir arquivo, validar, transformar e persistir. A sequência é comum, mas a leitura e conversão variam. O padrão conserva a ordem e oferece pontos de personalização.
Exemplo em C#
public abstract class Importador
{
public void Importar(string caminho)
{
var texto = Ler(caminho);
Validar(texto);
Persistir(Converter(texto));
}
protected abstract string Ler(string caminho);
protected virtual void Validar(string texto) { }
protected abstract Registros Converter(string texto);
protected abstract void Persistir(Registros registros);
}O método público controla o algoritmo; subclasses implementam as variações. Em hierarquias extensas, prefira composição e Strategy.
Quando usar
Use quando a ordem de etapas é invariável e pontos de variação são bem definidos. Herança pode acoplar subclasses à base e métodos hook opcionais podem confundir. Mantenha invariantes protegidas e documente extensões. Mais exemplos no catálogo GoF.