Padrão Template Method
Last updated
Was this helpful?
Last updated
Was this helpful?
O Padrão Template Method é um padrão de projeto comportamental que define o esqueleto de um algoritmo na superclasse mas deixa as subclasses sobrescreverem etapas específicas do algoritmo sem modificar sua estrutura.
Imagine que sua equipe de desenvolvimento quer construir um gerador de documentos. Esse gerador de documentos toma como base um template (modelo) e define seções específicas como cabeçalho e corpo, como no modelo abaixo.
Se imaginarmos as instâncias (como o de Experiência Química acima) de relatório como classes que buscam reaproveitar código do template, para que implementem apenas os detalhes necessários para o seu relatório, como poderiamos modelar essas classes?
Antes de partirmos para a solução, é interessante entender o conceito de Hook Method (Método Gancho). Hook methods são métodos que permitem extensão. A superclasse possui um método principal público que é invocado pelos seus clientes (qualquer classe que queira utilizá-lo). Esse método delega parte de sua execução para o hook method, que é um método abstrato que deve ser implementado pela subclasse.
Essa técnica e muito utilizada em frameworks para permitir que as aplicações possam especializar seu comportamento para seus requisitos A aplicação deve estender essa classe e implementar o hook method de forma a inserir o comportamento especifico de seu domínio.
Hook method é uma técnica, diferentemente dos padrões que já vimos até agora. Encare ela como um recurso que a linguagem provê.
Como dito anteriormente, o Padrão Template Method “Define um esqueleto de um algoritmo, delegando alguns passos para suas subclasses.” Um modelo de documento define algumas partes que são fixas e outras partes que devem ser introduzidas quando o documento propriamente dito for criado. Assim como a intenção do Template Method.
No exemplo abaixo, buscando simplificar, temos uma classe "Template" que define um método imprimir
que seria comum a todos as classes de relatório, implementa parte do algoritmo comum a todos (nesse caso o cabeçalho e rodapé) e deixa que as partes variáveis sejam definidas por quem for implementar os métodos definirIntroducao
e definirCorpo
, nesse caso qualquer classe que venha a estender DocumentoTemplate
.
Template Method é o principal padrão que utiliza hook methods como técnica. É aplicável quando desejamos definir um algoritmo geral, com N passos e que podem variar.
O diagrama UML a seguir demonstra a estrutura do padrão.
Com o Template Method podemos reaproveitar o código relativo à parte comum de um algoritmo, permitindo que cada passo variável possa ser definido na subclasse.
Porém, lembre-se que a herança traz alguns problemas de acoplamento.
Para pesquisar: Com o recurso de Default Method, introduzido no Java 8, seria possível implementar esse padrão sem que fosse necessário utilizar herança?