Template Method
Projeto de Sistemas de Software
Sérgio Luiz Ruivace Cerqueira
Propósito
• Esse padrão define que sejam implementadas certas partes
de um algoritmo na classe abstrata e as que não foram
implementadas devem ser nas classes filhas concretas.
Assim, é possível aplicar determinados comportamentos no
algoritmo e reusar o mesmo algoritmo, de acordo com as
classes filhas.
© LES/PUC-Rio
Motivação
• Considere um framework para jogos de tabuleiro.
• A classe Jogo têm os métodos abstratos: inicializarJogo(),
fazerJogada(Jogador), fimJogo() e imprimirGanhador()
• O método template é jogarPartida(Jogadores). Esse método
inicializa a partida e enquanto o jogo não termina um
jogador faz uma jogada. No final o vencedor é impresso.
• Dessa forma é possível criar diversos jogos diferentes
reutilizando o algoritmo de jogar uma partida.
© LES/PUC-Rio
Aplicabilidade
• Útil para a implementação de frameworks e aplicações
flexíveis.
• Pode ser utilizado para implementar as partes invariantes de
um algoritmo uma só vez e deixar para as subclasses a
implementação do comportamento que pode variar
• Quando classes contem código replicado, esse padrão pode
ser usado para fundir o código repetido e deixar as
subclasses implementarem as variações.
• Além de poder ser usado para controlar extensões de
subclasses.
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Participantes
• AbstractClass
– Define métodos abstratos que as subclasses concretas
implementam.
– Implementa um método concreto template que contem o
esqueleto de um algoritmo.
– Além disso o método template invoca os métodos necessários
para a execução do algoritmo inclusive os métodos abstratos,
que são implementados nas subclasses concretas.
• ConcreteClass
– Implementa os métodos abstratos necessários para a execução
do método template.
– Redefine métodos da AbstractClass.
© LES/PUC-Rio
Colaborações
• ConcreteClass faz uma chamada à AbstractClass, que
contem o esqueleto do algoritmo, após isso o
templateMethod() faz as devidas chamadas à
ConcreteClass.
© LES/PUC-Rio
Conseqüências
• Facilita a reutilização de código
• Inversão de Controle (IoC)
• Os desenvolvedores são obrigados a saber quais classes
devem e quais podem ser redefinidas.
© LES/PUC-Rio
Código de Exemplo
© LES/PUC-Rio
Código de Exemplo
© LES/PUC-Rio
Referencias
• Gamma et al., Padrões de Projeto - soluções reutilizáveis de
software orientado a objetos, Porto Alegre : Bookman ,
2000.
• Wikpedia, Template method pattern, acessado em 5 de abril
de 2009.
© LES/PUC-Rio
Download

Slides - (LES) da PUC-Rio