Java Academy · Aula

Template Method: Definição de Esqueletos de Algoritmos

Defina o esqueleto de um algoritmo em uma classe-base e permita que as subclasses preencham as etapas.

Aula 4 de 414 etapas

Template Method: Definição de Esqueletos de Algoritmos é uma aula grátis de Java Academy no CoddyKit. Esta é a aula 4 de 4. Você pode ler a aula completa abaixo gratuitamente — depois pratica ao vivo no navegador com um editor de código integrado e um tutor de IA 24/7. Faz parte do caminho de aprendizado de Java Academy, e seu progresso é sincronizado entre a web e o app CoddyKit. O curso de Java Academy inclui 4 aulas no total.

A intenção do Método-Modelo

O Método-Modelo define o esqueleto de um algoritmo em uma classe-base, deixando algumas etapas para as subclasses. As subclasses podem substituir etapas sem alterar a estrutura geral.

A classe-base abstract

A classe-base contém o método-modelo (geralmente final) que orquestra as etapas. Métodos abstract representam as etapas variáveis. Métodos concretos fornecem o comportamento padrão.

public abstract class DataProcessor {
    // Template method — final, defines the algorithm
    public final void process() {
        readData();
        processData();
        writeResult();
    }
    protected abstract void readData();
    protected abstract void processData();
    protected void writeResult() {
        System.out.println("Result written (default)");
    }
}

Subclasses concretas

Cada subclasse preenche as etapas abstract. A sequência do método-modelo nunca muda — apenas a implementação das etapas individuais varia.

public class CSVProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading CSV..."); }
    protected void processData() { System.out.println("Parsing CSV rows..."); }
}
public class XMLProcessor extends DataProcessor {
    protected void readData()    { System.out.println("Reading XML..."); }
    protected void processData() { System.out.println("Parsing XML nodes..."); }
    @Override
    protected void writeResult() { System.out.println("Writing XML result."); }
}

Métodos de gancho

Um gancho é uma etapa opcional com uma implementação padrão, geralmente vazia. As subclasses podem substituir os ganchos para acrescentar comportamento opcional sem serem obrigadas a implementá-los.

public abstract class Game {
    public final void play() {
        initialize();
        while (!isDone()) takeTurn();
        printWinner();
    }
    protected void initialize() {}  // hook — optional override
    protected abstract boolean isDone();
    protected abstract void takeTurn();
    protected abstract void printWinner();
}

Método-Modelo versus Estratégia

O Método-Modelo usa herança: o esqueleto é fixo na classe-base e as etapas são substituídas nas subclasses. A Estratégia usa composição: o algoritmo inteiro é externo. A Estratégia é mais flexível; o Método-Modelo é mais simples quando as etapas compartilham muito contexto.

InputStream do Java como método-modelo

O read(byte[], int, int) de java.io.InputStream é implementado com base no read() abstract. As subclasses implementam a versão de um byte; a leitura de vários bytes é o método-modelo.

Método-modelo para geração de relatórios

Defina um modelo de relatório: reúna os dados, formate-os e gere a saída. Troque as subclasses para obter saída em PDF, HTML ou CSV sem alterar a lógica de orquestração.

public abstract class ReportGenerator {
    public final String generate() {
        List<Record> data = fetchData();
        String body = format(data);
        return wrap(body);
    }
    protected abstract List<Record> fetchData();
    protected abstract String format(List<Record> data);
    protected String wrap(String body) { return body; } // hook
}

Como impedir a substituição do método-modelo

Declare o método-modelo como final para impedir que as subclasses alterem a estrutura do algoritmo. Apenas os métodos de gancho e abstract devem poder ser substituídos.

public final void process() {
    validate(); // abstract
    execute();  // abstract
    cleanup();  // hook with default
}

Etapas abstract versus concretas

Torne uma etapa abstract quando ela deve ser fornecida pela subclasse. Torne-a concreta, possivelmente vazia, quando as subclasses podem substituí-la para personalização.

Método-modelo no JUnit

setUp() e tearDown() do JUnit 4 são ganchos no método-modelo definido pelo executor de testes. O executor controla quando eles são chamados.

Método-modelo no Spring

O JdbcTemplate do Spring usa internamente o Método-Modelo. O modelo controla a conexão, a criação da instrução e a limpeza; você fornece uma lambda RowMapper para a etapa variável de "mapear linha".

List<User> users = jdbcTemplate.query(
    "SELECT * FROM users",
    (rs, row) -> new User(rs.getLong("id"), rs.getString("name"))
);

Evite herança profunda

O Método-Modelo depende de herança, o que pode produzir hierarquias profundas de classes. Limite-as a 1–2 níveis. Se as subclasses começarem a substituir muitas etapas de maneiras diferentes, considere mudar para a Estratégia.

Verificação rápida

Qual palavra-chave impede que as subclasses alterem a sequência do método-modelo?

Recapitulação

O Método-Modelo fixa o esqueleto do algoritmo em uma classe-base com final. As subclasses implementam etapas abstract e podem substituir ganchos opcionalmente. Mantenha as hierarquias rasas; use a Estratégia quando precisar de mais flexibilidade.

Grátis para começar

Aprenda Java com um tutor de IA — grátis

Escreva e execute código real no seu navegador, obtenha ajuda instantânea de um tutor de IA 24/7 e continue de onde parou na web ou no app.

Cursos
104
Aulas
374

Perguntas Frequentes

A aula “Template Method: Definição de Esqueletos de Algoritmos” é grátis?

Sim — o texto completo de “Template Method: Definição de Esqueletos de Algoritmos” é grátis para ler aqui na web. Para praticá-la interativamente (um editor de código integrado e um tutor de IA 24/7) e desbloquear o restante do curso de Java Academy, atualize para CoddyKit PRO. O curso de Java Academy inclui 4 aulas no total.

O que vou aprender em “Template Method: Definição de Esqueletos de Algoritmos”?

Defina o esqueleto de um algoritmo em uma classe-base e permita que as subclasses preencham as etapas. Você pratica Java Academy com código prático que executa diretamente no navegador, e um tutor de IA 24/7 responde suas dúvidas enquanto trabalha na aula.

Preciso ter experiência prévia para começar Java Academy?

Nenhuma experiência prévia é necessária. Java Academy no CoddyKit é estruturado para alunos iniciantes até avançados, então você pode começar aqui ou desde o início e aprender no seu ritmo. Esta é a aula 4 de 4.

Quanto tempo leva a aula “Template Method: Definição de Esqueletos de Algoritmos”?

A maioria das aulas CoddyKit leva cerca de 5–10 minutos. Cada uma é compacta e interativa, então você faz progresso constante e retoma exatamente de onde parou entre web e app.

Posso escrever e executar código nesta aula de Java Academy?

Sim. Cada aula de Java Academy inclui um editor de código integrado, então você escreve e executa código real direto no navegador e recebe feedback de IA instantaneamente — nenhuma configuração local necessária.

Todas as aulas deste curso

  1. Padrão Observer: Notificação de Eventos
  2. Padrão Strategy: Algoritmos Intercambiáveis
  3. Padrão Command: Encapsulamento de Ações
  4. Template Method: Definição de Esqueletos de Algoritmos
← Voltar para Java Academy