SlideServe
Menu
Préférences
© SlideServe · v2026

Strategy e Template Method

cybil avatar
23 diapositives · 389 Views · Aug 13, 2014

Strategy e Template Method. Professor: Hyggo Almeida. 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

Strategy e Template Method - slide 1
01 / 23Strategy e Template Method
1 / 17

Télécharger la présentation

Strategy e Template Method
Une image / un lien ci-dessous est fourni (tel quel) pour télécharger la présentation

Politique de téléchargement : le contenu du site vous est fourni TEL QUEL pour votre information et votre usage personnel ; il ne peut être vendu, concédé sous licence ni partagé sur d’autres sites sans l’accord de son auteur.Le contenu vous est fourni TEL QUEL, pour votre information et votre usage personnel uniquement. Téléchargez la présentation en cliquant sur ce lien. Lors du téléchargement, si vous ne parvenez pas à télécharger une présentation, l’éditeur a peut-être supprimé le fichier de son serveur.Pendant le téléchargement, si vous ne parvenez pas à obtenir une présentation, le fichier a peut-être été supprimé par l’éditeur.

F I N

Plus de contenu associé

Transcription de la présentation
  1. Strategy e TemplateMethod Professor: Hyggo Almeida

  2. 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 • ...

  3. 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?

  4. Strategy • E define o algoritmo para retornar o preço de acordo com o tipo do ingresso... 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 }

  5. 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 caseterá que ser adicionado!!! Alterando novamente a classe ingresso... • Solução??? • Padrão Strategy

  6. Encapsular algoritmos em objetosdenominados estratégias!!! Ingresso <<interface>> Calculavel getPreco(); CalcVale CalcNormal getPreco(); getPreco(); CalcIdoso CalcCrianca getPreco(); getPreco();

  7. A limpeza: • É possível adicionar facilmente novas estratégias • A alteração de estratégias existentes não afeta a claseIngresso public double getPreço(){ return this.calculador.getPreco(); }

  8. 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.

  9. 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

  10. Outro exemplo: LayoutManager

  11. 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?

  12. 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... Strategy e Template Method

  13. Template Method RELATÓRIO TÉCNICO SóBug Softwares FIXO ISSO MUDA!!!Vendas Compras Fornecedores Lucros Despesas... MUTÁVEL Empresa de Software SóBug Av. ABC, 0100101, Campina Grande, PB Tel.: 8888-9888 FIXO Strategy e Template Method

  14. Como projetar??? exibir(); <<interface>> RelatórioIF Teste RelatorioVendas RelatorioLucros exibir(); exibir(); RelatorioCompras exibir(); Strategy e Template Method

  15. Código duplicado • Problemas??? • O cabeçalho e rodapé são iguais... não estou compartilhando código...e ainda estou duplicando exibir(); <<interface>> RelatórioIF Teste RelatorioVendas RelatorioLucros exibir(); exibir(); RelatorioCompras exibir(); Strategy e Template Method

  16. 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... publicvoid exibir(){ exibirCabecalho(); exibirConteudo(); exibirRodape(); } Strategy e Template Method

  17. publicvoid exibirCabecalho(){ System.out.println(“Cabecalho”); System.out.println(“...”); ... } publicvoid exibirRodape(){ System.out.println(“Rodapé”); System.out.println(“...”); ... } publicvoidabstract exibirConteudo(); Strategy e Template Method

  18. Template Method • Projeto com o Template Method (exibir()) exibir(); <<abstract>> RelatorioAbstrato Teste RelatorioVendas RelatorioLucros exibirConteudo(); exibirConteudo(); RelatorioCompras exibirConteudo(); Strategy e Template Method

  19. 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”. Strategy e Template Method

  20. 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 Strategy e Template Method

  21. O que vimos hoje? • Strategy • Template Method Strategy e Template Method

  22. O que veremos na próxima aula? • Visão crítica sobre padrões: over-engineering Strategy e Template Method

  23. Dúvidas? ? Strategy e Template Method