A apresentação está carregando. Por favor, espere

A apresentação está carregando. Por favor, espere

Strategy e Template Method

Apresentações semelhantes


Apresentação em tema: "Strategy e Template Method"— Transcrição da apresentação:

1 Strategy e Template Method
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 TAXA_ADICIONAL; case 1: return TAXA_DESCONTO; case 2: return 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 case terá que ser adicionado!!! Alterando novamente a classe ingresso... Solução??? Padrão Strategy

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

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

8 Strategy Intenção Aplicabilidade
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 FIXO SóBug Softwares
ISSO MUDA!!! Vendas Compras Fornecedores Lucros Despesas... MUTÁVEL Empresa de Software SóBug Av. ABC, , Campina Grande, PB Tel.: FIXO Strategy e Template Method

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

15 <<interface>>
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 Código duplicado 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... public void exibir(){ exibirCabecalho(); exibirConteudo(); exibirRodape(); } Strategy e Template Method

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

18 <<abstract>>
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


Carregar ppt "Strategy e Template Method"

Apresentações semelhantes


Anúncios Google