← Back to home

Template Method

By Pscodium · 8/4/2026 · 4 views

Template Method

O Template Method define a estrutura geral de um algoritmo em uma classe base, deixando algumas etapas para as subclasses implementarem.

A ideia é:

Definir o esqueleto de um algoritmo, permitindo que subclasses personalizem determinadas etapas.

Imagine o processamento de arquivos:

Ler arquivo
   ↓
Processar dados
   ↓
Salvar resultado

O fluxo é sempre o mesmo, mas o processamento pode mudar.


Classe base

abstract class DataProcessor {

  process() {
    this.read();

    this.processData();

    this.save();
  }

  abstract read(): void;

  abstract processData(): void;

  abstract save(): void;
}

A classe define a ordem:

read()
  ↓
processData()
  ↓
save()

As subclasses implementam os detalhes.


Processador CSV

class CsvProcessor
  extends DataProcessor {

  read() {
    console.log(
      "Lendo CSV"
    );
  }

  processData() {
    console.log(
      "Processando CSV"
    );
  }

  save() {
    console.log(
      "Salvando resultado CSV"
    );
  }
}

Processador JSON:

class JsonProcessor
  extends DataProcessor {

  read() {
    console.log(
      "Lendo JSON"
    );
  }

  processData() {
    console.log(
      "Processando JSON"
    );
  }

  save() {
    console.log(
      "Salvando resultado JSON"
    );
  }
}

Uso:

const processor =
  new CsvProcessor();

processor.process();

O fluxo será:

Lendo CSV
     ↓
Processando CSV
     ↓
Salvando resultado CSV

O fluxo principal não pode ser alterado pela subclasse.


Exemplo prático

Imagine um sistema de importação:

Importar dados
      ↓
Validar
      ↓
Transformar
      ↓
Salvar
      ↓
Notificar

O processo é sempre igual, mas podemos ter:

CSV Importer
JSON Importer
XML Importer
Excel Importer

Cada implementação muda apenas as etapas necessárias.


Hook

Uma característica comum do Template Method são os hooks.

Um hook é um método que pode ser sobrescrito opcionalmente.

abstract class DataProcessor {

  process() {
    this.read();

    this.processData();

    if (
      this.shouldNotify()
    ) {
      this.notify();
    }
  }

  abstract read(): void;

  abstract processData(): void;

  shouldNotify() {
    return true;
  }

  notify() {
    console.log(
      "Notificando"
    );
  }
}

Uma subclasse pode alterar:

shouldNotify() {
  return false;
}

Assim, ela mantém o algoritmo geral, mas modifica uma parte opcional.


Template Method vs Strategy

Os dois padrões ajudam a variar algoritmos, mas de maneiras diferentes.

Template Method:

Herança
   ↓
Classe base define o fluxo
   ↓
Subclasses implementam etapas

Strategy:

Composição
   ↓
Objeto recebe um algoritmo
   ↓
Algoritmo pode ser trocado

Template Method utiliza principalmente herança.

Strategy utiliza principalmente composição.


Quando usar?

Template Method é útil quando:

  • Várias classes seguem o mesmo fluxo.
  • Algumas etapas variam.
  • Queremos garantir uma ordem fixa de execução.
  • Existe código duplicado entre algoritmos semelhantes.

A ideia principal é:

Definir o fluxo geral de um algoritmo na classe base e permitir que subclasses personalizem etapas específicas.



Comments

No comments yet.