strategy e template method

Post on 07-Feb-2016

35 Views

Category:

Documents

1 Downloads

Preview:

Click to see full reader

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

Strategy e Template MethodProfessor: 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

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

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}

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

Encapsular algoritmos em objetos denominados estratégias!!!

6

Ingresso <<interface>>Calculavel

CalcNormal

CalcCriancaCalcIdoso

CalcVale

getPreco();

getPreco();

getPreco();

getPreco();

getPreco();

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();}

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

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

Outro exemplo: LayoutManager

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?

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

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

Como projetar???

14Strategy e Template Method

<<interface>>RelatórioIF

RelatorioVendas

RelatorioCompras

RelatorioLucros

Testeexibir();

exibir();

exibir();

exibir();

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

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();}

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();

Template Method

Projeto com o Template Method (exibir())

18Strategy e Template Method

<<abstract>>RelatorioAbstrato

RelatorioVendas

RelatorioCompras

RelatorioLucros

Testeexibir();

exibirConteudo();

exibirConteudo();

exibirConteudo();

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

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

O que vimos hoje?

Strategy

Template Method

21Strategy e Template Method

O que veremos na próxima aula?

Visão crítica sobre padrões: over-engineering

22Strategy e Template Method

Dúvidas?

?23Strategy e Template Method

top related