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.
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.
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
- Padrão Observer: Notificação de Eventos
- Padrão Strategy: Algoritmos Intercambiáveis
- Padrão Command: Encapsulamento de Ações
- Template Method: Definição de Esqueletos de Algoritmos