Download - Padrão de Projeto - Decorator
![Page 1: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/1.jpg)
Padrão DecoratorAnexa responsabilidades adicionaisa um objeto de maneira dinâmica.
![Page 2: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/2.jpg)
2
Padrão Decorator
Para entender melhor,vamos imaginar a seguinte situação...
Juliane Silva
![Page 3: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/3.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/4.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/5.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/6.jpg)
6
Padrão Decorator
Café? Com adicional?Como fazer isso? E dinamicamente?
Juliane Silva
![Page 7: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/7.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/8.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/9.jpg)
9
Padrão Decorator
Ok... Então, qual é a melhor
solução para StarBuzz?Juliane Silva
![Page 10: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/10.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/11.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/12.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/13.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/14.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/15.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/16.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/17.jpg)
17
Padrão Decorator
Pedido: Um café tradicional,com chocolate,com leite.
Resultado...
Juliane Silva
![Page 18: Padrão de Projeto - Decorator](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/18.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/19.jpg)
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](https://reader031.vdocuments.site/reader031/viewer/2022013108/558de5dc1a28ab07438b473f/html5/thumbnails/20.jpg)
20
Obrigada!Referência Bibliográfica:
Padrão Decorator
Juliane Silva