20
Padrão Decorator Anexa responsabilidades adicionais a um objeto de maneira dinâmica.

Padrão de Projeto - Decorator

Embed Size (px)

DESCRIPTION

Os slides mostram, através de um simples exemplo em Java, do que se trata o padrão de projeto Decorator e em que momentos devemos utilizá-lo.

Citation preview

Page 1: Padrão de Projeto - Decorator

Padrão DecoratorAnexa responsabilidades adicionaisa um objeto de maneira dinâmica.

Page 2: Padrão de Projeto - Decorator

2

Padrão Decorator

Para entender melhor,vamos imaginar a seguinte situação...

Juliane Silva

Page 3: Padrão de Projeto - Decorator

3

Padrão Decorator

Starbuzz Coffee, uma cafeteria famosa, deseja atualizar seu sistema para cor-responder a sua oferta de bebidas.

Juliane Silva

Page 4: Padrão de Projeto - Decorator

4

Padrão Decorator

O que a StarBuzz tem, por enquanto, é...

calcularPreco() é abstrato, para que as subclasses defi-nam sua implementação.

Juliane Silva

Page 5: Padrão de Projeto - Decorator

5Juliane Silva

Porém, a StarBuzz não oferece SÓ isso...

Os adicionais são o atrativo desse lugar!

E, como é cobrado um valor por adicional, é

preciso incluí-los no sistema.

Padrão Decorator

Page 6: Padrão de Projeto - Decorator

6

Padrão Decorator

Café? Com adicional?Como fazer isso? E dinamicamente?

Juliane Silva

Page 7: Padrão de Projeto - Decorator

7

Padrão Decorator

Solução 1: 1 classe para cada combinação.Tradicional + Leite; Tradicional + Espuma; Tradicional + Leite + Espuma, ...

Cada classe calcula o preço do café juntamente com o adicional pedido.

E quando o preço do leite aumentar?E quando um novo adicional entrar?

E quando? E quando?...

CANCELADA!

Juliane Silva

Page 8: Padrão de Projeto - Decorator

8

Padrão Decorator

Solução 2: variáveis para representar os adicionais.leite, espuma, creme, chocolate, ...

Calcula o total dos adicionais.

E se o preço do leite aumentar?E se chá gelado entrar? Sem leite, sem creme, sem nada.

Calcula o preço da bebida + adicionais (super.calcular Preco()).

E se o cliente quiser 2x creme?

CANCELADA!

Juliane Silva

Page 9: Padrão de Projeto - Decorator

9

Padrão Decorator

Ok... Então, qual é a melhor

solução para StarBuzz?Juliane Silva

Page 10: Padrão de Projeto - Decorator

10

Padrão Decorator

Solução 3 (a melhor entre elas):

PADRÃO DECORATOR!Considera os princípio de herança/composição e aberto/fechado.

Juliane Silva

Page 11: Padrão de Projeto - Decorator

11

Solução 3: padrão Decorator.Vamos começar com uma bebida e “decorá-la” no tempo de execução.

3. Decorá-lo com um objeto Leite.

4. Chamar calcularPreco() e contar com a delegação para adicionar o preço da bebida+adicionais.

1. Pegar um objeto CafeTradicional.

2. Decorá-lo com um objeto Choco-late.

Padrão Decorator

Juliane Silva

Page 12: Padrão de Projeto - Decorator

12

1. Começamos com o objeto Cafe-Tradicional.

2. Criamos um objeto Chocolate e englobamos CafeTradicional nele.

3. Criamos um decorador Leite e colocamos Chocolate dentro.

Mas como se decora?Padrão Decorator

calcularPreco()Leite

calcularPreco()CafeTradicional

calcularPreco()Chocolate

calcularPreco()CafeTradicional

calcularPreco()CafeTradicional

calcularPreco()Chocolate

Juliane Silva

Page 13: Padrão de Projeto - Decorator

13

E como se calcula o preço de tudo isso?

Padrão Decorator

calcularPreco()Leite

calcularPreco()CafeTradicional

calcularPreco()Chocolate

1. Chamamos calcularPreco() do decorador externo, Leite.

2. Leite chama calcularPreco() de Chocolate.

3. Chocolate chama calcular-Preco() de CafeTradicional.

4. CafeTradicional re-torna seu valor.

5. Chocolate retorna seu valor + CafeTradicional

6. Leite retorna seu valor + Chocolate, que é o valor total.

Juliane Silva

Page 14: Padrão de Projeto - Decorator

14

Padrão Decorator

Enfim, temos a solução para o nosso problema!

Que é representada assim...

Componentes aos quais adi-cionamos dinamicamente um novo comportamento.

Os decoradores precisam da mesma interface dos componentes, porque ficam no lugar deles.

Os decoradores em-globam um compo-nente.

Juliane Silva

Page 15: Padrão de Projeto - Decorator

15

Padrão Decorator

E assim...

Bebida, a nossa superclasse.

Onde calculamos o preço de um CafeTradicional.

Juliane Silva

Page 16: Padrão de Projeto - Decorator

16

Padrão Decorator

Onde calculamos o preço do Chocolate+CafeTradicional.

Bebida que estamos englobando.

Os decoradores preci-sam ser do mesmo ti-po que as bebidas.

Juliane Silva

Page 17: Padrão de Projeto - Decorator

17

Padrão Decorator

Pedido: Um café tradicional,com chocolate,com leite.

Resultado...

Juliane Silva

Page 18: Padrão de Projeto - Decorator

18

Formalmente...

• Os decoradores têm o mesmo supertipo que os objetos que eles decoram;

• É permitido usar 1/+ decoradores para englobar um objeto;

• Os objetos podem ser decorados dinamicamen-te em tempo de execução.

Padrão Decorator

Juliane Silva

Page 19: Padrão de Projeto - Decorator

19

E, ao contrário da herança, que aplica funcionalidade a todos os objetos dela, ele permite

aplicar funcionalidades a um objeto específico.

Padrão Decorator

Juliane Silva

Page 20: Padrão de Projeto - Decorator

20

Obrigada!Referência Bibliográfica:

Padrão Decorator

Juliane Silva