strategy e template method

23
Strategy e Template Method Professor: Hyggo Almeida

Upload: cybil

Post on 07-Feb-2016

35 views

Category:

Documents


1 download

DESCRIPTION

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 - PowerPoint PPT Presentation

TRANSCRIPT

Page 1: Strategy  e  Template Method

Strategy e Template MethodProfessor: Hyggo Almeida

Page 2: Strategy  e  Template Method

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

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

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

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

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

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

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

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

Outro exemplo: LayoutManager

Page 11: Strategy  e  Template Method

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

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

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

Como projetar???

14Strategy e Template Method

<<interface>>RelatórioIF

RelatorioVendas

RelatorioCompras

RelatorioLucros

Testeexibir();

exibir();

exibir();

exibir();

Page 15: Strategy  e  Template Method

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

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

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

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

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

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

O que vimos hoje?

Strategy

Template Method

21Strategy e Template Method

Page 22: Strategy  e  Template Method

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

Dúvidas?

?23Strategy e Template Method