23
Strategy e Template Method Professor: Hyggo Almeida

Strategy e Template Method Professor: Hyggo Almeida

Embed Size (px)

Citation preview

Page 1: Strategy e Template Method Professor: Hyggo Almeida

Strategy e Template MethodProfessor: Hyggo Almeida

Page 2: 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 se o cliente tem carteira de estudante promoções-relâmpago ...

2

Page 3: Strategy e Template Method Professor: Hyggo Almeida

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

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

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

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

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

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

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

Outro exemplo: LayoutManager

Page 11: Strategy e Template Method Professor: Hyggo Almeida

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

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

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

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

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

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

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

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

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

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

O que vimos hoje?

Strategy

Template Method

21Strategy e Template Method

Page 22: Strategy e Template Method Professor: Hyggo Almeida

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

Dúvidas?

?23Strategy e Template Method