![Page 1: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/1.jpg)
Strategy e Template MethodProfessor: Hyggo Almeida
![Page 2: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/2.jpg)
Sistema de venda de ingressos
Existe uma classe Ingresso que possui um método getPreco();
O preço muda de acordo com a idade da pessoa... e outras coisas mais... quando o ingresso foi comprado se o cliente tem carteira de estudante promoções-relâmpago ...
2
![Page 3: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/3.jpg)
Possíveis soluções
Colocar a lógica que decide qual cálculo deve ser feito na classe Ingresso
Hierarquia de classes para Ingresso
Que mais?
3
![Page 4: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/4.jpg)
Strategy
E define o algoritmo para retornar o preço de acordo com o tipo do ingresso...
4
public double getPreço(){ switch(tipoIngresso){
case 0: return 3.00 + TAXA_ADICIONAL;case 1: return 2.00 + TAXA_DESCONTO;case 2: return 4.00 + TAXA_ADICIONAL;case 3: return 1.00;
} return 5.00; //Preço normal}
![Page 5: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/5.jpg)
Strategy
Problemas??? Sempre que um cálculo de preço for
alterado... a classe ingresso terá que ser alterada.
Se uma nova promoção surgir... um novo case terá que ser adicionado!!! Alterando novamente a classe ingresso...
Solução??? Padrão Strategy
5
![Page 6: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/6.jpg)
Encapsular algoritmos em objetos denominados estratégias!!!
6
Ingresso <<interface>>Calculavel
CalcNormal
CalcCriancaCalcIdoso
CalcVale
getPreco();
getPreco();
getPreco();
getPreco();
getPreco();
![Page 7: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/7.jpg)
A limpeza:
É possível adicionar facilmente novas estratégias
A alteração de estratégias existentes não afeta a clase Ingresso 7
public double getPreço(){ return this.calculador.getPreco();}
![Page 8: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/8.jpg)
Strategy
Intenção definir uma família de algoritmos, encapsular
cada uma delas e torná-las intercambiáveis. Permite que o algoritmo varie independente dos clientes que o utilizam.
Aplicabilidade muitas classes relacionadas diferem apenas no
seu comportamento; você necessita de variantes de um determinado
algoritmo.8
![Page 9: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/9.jpg)
Strategy
Conseqüências famílias de algoritmos relacionados uma alternativa ao uso de subclasses estratégias eliminam comandos
condicionais da linguagem de programação
possibilita escolher dinamicamente uma implementação
os clientes precisam conhecer várias estratégias
aumento do número de objetos 9
![Page 10: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/10.jpg)
Outro exemplo: LayoutManager
![Page 11: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/11.jpg)
Exemplo com Ingresso
Repare que a estratégia precisa de informação do contexto
E se a estratégia fosse escolher a melhor forma de cálculo dentre várias disponíveis?
![Page 12: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/12.jpg)
Template Method
Imaginem o projeto de um gerador de relatório...
Exemplo muito simples... porém eficaz!
Uma classe Relatório possui um método exibir()
Este método exibe o relatório na tela
O texto do relatório depende do seu tipo
Mas o cabeçalho e o rodapé são sempre os mesmos... 12
Strategy e Template Method
![Page 13: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/13.jpg)
Template Method
13Strategy e Template Method
RELATÓRIO TÉCNICOSóBug Softwares
Empresa de Software SóBugAv. ABC, 0100101, Campina Grande, PB
Tel.: 8888-9888
ISSO MUDA!!!Vendas
ComprasFornecedores
LucrosDespesas...
FIXO
FIXO
MUTÁVEL
![Page 14: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/14.jpg)
Como projetar???
14Strategy e Template Method
<<interface>>RelatórioIF
RelatorioVendas
RelatorioCompras
RelatorioLucros
Testeexibir();
exibir();
exibir();
exibir();
![Page 15: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/15.jpg)
Problemas??? O cabeçalho e rodapé são iguais... não estou
compartilhando código...e ainda estou duplicando
15Strategy e Template Method
<<interface>>RelatórioIF
RelatorioVendas
RelatorioCompras
RelatorioLucros
Testeexibir();
exibir();
exibir();
exibir();
Códigoduplicado
![Page 16: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/16.jpg)
Template Method
Solução??? Template Method Define-se um esqueleto do método exibir...
E define o comportamento MUTÁVEL como um método abstrato...
16Strategy e Template Method
public void exibir(){ exibirCabecalho(); exibirConteudo(); exibirRodape();}
![Page 17: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/17.jpg)
17Strategy e Template Method
public void exibirCabecalho(){System.out.println(“Cabecalho”);System.out.println(“...”);...
}
public void exibirRodape(){System.out.println(“Rodapé”);System.out.println(“...”);...
}
public void abstract exibirConteudo();
![Page 18: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/18.jpg)
Template Method
Projeto com o Template Method (exibir())
18Strategy e Template Method
<<abstract>>RelatorioAbstrato
RelatorioVendas
RelatorioCompras
RelatorioLucros
Testeexibir();
exibirConteudo();
exibirConteudo();
exibirConteudo();
![Page 19: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/19.jpg)
Template Method
Intenção Definir o esqueleto de um algoritmo em
uma operação, postergando alguns passos para as subclasses
Aplicabilidade para implementar as partes invariantes
de um algoritmo uma só vez e deixar para as subclasses a implementação do comportamento que pode variar
para controlar extensões de subclasses utilizando “ganchos”. 19
Strategy e Template Method
![Page 20: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/20.jpg)
Template Method
Conseqüências maximiza a reutilização de código definição de “ganchos” para as
subclasses princípio de Hollywood: “não nos
chame... nós chamamos vocês” Alternativa ao Strategy
Uso freqüente... Application Frameworks 20
Strategy e Template Method
![Page 21: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/21.jpg)
O que vimos hoje?
Strategy
Template Method
21Strategy e Template Method
![Page 22: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/22.jpg)
O que veremos na próxima aula?
Visão crítica sobre padrões: over-engineering
22Strategy e Template Method
![Page 23: Strategy e Template Method Professor: Hyggo Almeida](https://reader035.vdocuments.mx/reader035/viewer/2022062418/552fc12d497959413d8d2ae7/html5/thumbnails/23.jpg)
Dúvidas?
?23Strategy e Template Method