SlideShare uma empresa Scribd logo
1 de 20
Padrão Decorator
Anexa responsabilidades adicionais
a um objeto de maneira dinâmica.
Padrão Decorator

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

Juliane Silva

2
Padrão Decorator

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

Juliane Silva

3
Padrão Decorator

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

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

Juliane Silva

4
Padrão Decorator

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.
Juliane Silva

5
Padrão Decorator

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

Juliane Silva

6
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.

Juliane Silva

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

7
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.
E se o cliente quiser 2x creme?

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

Juliane Silva

8
Padrão Decorator

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

solução para StarBuzz?
Juliane Silva

9
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

10
Padrão Decorator

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

3. Decorá-lo com um objeto Leite.

2. Decorá-lo com um objeto Choco-

4. Chamar calcularPreco() e contar

late.

Juliane Silva

com a delegação para adicionar
o preço da bebida+adicionais.

11
Padrão Decorator

Mas como se decora?
1. Começamos com o objeto CafeTradicional.
calcularPreco()
CafeTradicional

2. Criamos um objeto Chocolate e
englobamos CafeTradicional nele.
calcularPreco()
CafeTradicional

3. Criamos um decorador Leite e
colocamos Chocolate dentro.
calcularPreco()
CafeTradicional

calcularPreco()
Chocolate
calcularPreco()
Leite

calcularPreco()
Chocolate
Juliane Silva

12
Padrão Decorator

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

calcularPreco()
CafeTradicional

3. Chocolate chama calcularPreco() de CafeTradicional.
2. Leite chama calcularPreco()
de Chocolate.
1. Chamamos calcularPreco()
do decorador externo, Leite.
Juliane Silva

calcularPreco()
Chocolate
calcularPreco()
Leite

4. CafeTradicional retorna seu valor.
5. Chocolate retorna seu valor
+ CafeTradicional
6. Leite retorna seu valor +
Chocolate, que é o valor total.
13
Padrão Decorator
Enfim, temos a solução para o nosso problema!

Que é representada assim...
Componentes aos quais adicionamos dinamicamente um
novo comportamento.

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

Os decoradores emglobam um componente.

Juliane Silva

14
Padrão Decorator

E assim...

Bebida, a nossa superclasse.

Onde calculamos o preço
de um CafeTradicional.
Juliane Silva

15
Padrão Decorator
Os decoradores precisam ser do mesmo tipo que as bebidas.

Bebida que estamos
englobando.

Onde calculamos o preço do
Chocolate+CafeTradicional.

Juliane Silva

16
Padrão Decorator

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

Resultado...

Juliane Silva

17
Padrão Decorator

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 dinamicamente em tempo de execução.
Juliane Silva

18
Padrão Decorator

E, ao contrário da herança, que aplica
funcionalidade a todos os objetos dela, ele permite
aplicar funcionalidades a um objeto específico.

Juliane Silva

19
Padrão Decorator

Obrigada!
Referência Bibliográfica:

Juliane Silva

20

Mais conteúdo relacionado

Mais procurados

Sistema Operativos
Sistema OperativosSistema Operativos
Sistema Operativos
Bugui94
 

Mais procurados (20)

Aula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para WebAula 1 - Programação Dinâmica para Web
Aula 1 - Programação Dinâmica para Web
 
Computação em nuvem
Computação em nuvemComputação em nuvem
Computação em nuvem
 
SI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de CódigoSI - Processos, Threads, Virtualização e Migração de Código
SI - Processos, Threads, Virtualização e Migração de Código
 
Modelo V
Modelo VModelo V
Modelo V
 
Disco (Hard Disk)
Disco (Hard Disk)Disco (Hard Disk)
Disco (Hard Disk)
 
SSD - Solid State Drive
SSD - Solid State DriveSSD - Solid State Drive
SSD - Solid State Drive
 
Arquitetura de Software
Arquitetura de SoftwareArquitetura de Software
Arquitetura de Software
 
Modelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de softwareModelo de documento para levantamento de requisitos de software
Modelo de documento para levantamento de requisitos de software
 
Mobile - Uma introdução sobre sistemas para dispositivos móveis.
Mobile - Uma introdução sobre sistemas para dispositivos móveis.Mobile - Uma introdução sobre sistemas para dispositivos móveis.
Mobile - Uma introdução sobre sistemas para dispositivos móveis.
 
Aula 06 softwares
Aula 06   softwaresAula 06   softwares
Aula 06 softwares
 
Introdução a Gerência de Configuração de Software
Introdução a Gerência de Configuração de SoftwareIntrodução a Gerência de Configuração de Software
Introdução a Gerência de Configuração de Software
 
Inteligencia artificial 1
Inteligencia artificial 1Inteligencia artificial 1
Inteligencia artificial 1
 
Programação Orientado a Objetos
Programação Orientado a ObjetosProgramação Orientado a Objetos
Programação Orientado a Objetos
 
Curso básico de informática
Curso básico de informáticaCurso básico de informática
Curso básico de informática
 
Microservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native AppsMicroservices Architecture - Cloud Native Apps
Microservices Architecture - Cloud Native Apps
 
Laravel 5: Entenda o ambiente e a estrutura MVC
 Laravel 5: Entenda o ambiente e a estrutura MVC Laravel 5: Entenda o ambiente e a estrutura MVC
Laravel 5: Entenda o ambiente e a estrutura MVC
 
Ufcd 0755 (25h)
Ufcd 0755 (25h)Ufcd 0755 (25h)
Ufcd 0755 (25h)
 
Microservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud NetflixMicroservices com Spring Boot e Spring Cloud Netflix
Microservices com Spring Boot e Spring Cloud Netflix
 
Sistema Operativos
Sistema OperativosSistema Operativos
Sistema Operativos
 
PETI - Planejamento Estratégico de TI
PETI - Planejamento Estratégico de TI PETI - Planejamento Estratégico de TI
PETI - Planejamento Estratégico de TI
 

Destaque (7)

O Mítico Homem-Mês
O Mítico Homem-MêsO Mítico Homem-Mês
O Mítico Homem-Mês
 
Decorator - Padrões de projeto
Decorator - Padrões de projetoDecorator - Padrões de projeto
Decorator - Padrões de projeto
 
Decorator Design Pattern
Decorator Design PatternDecorator Design Pattern
Decorator Design Pattern
 
Prototype
PrototypePrototype
Prototype
 
Framework Yii
Framework YiiFramework Yii
Framework Yii
 
Arquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry PiArquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry Pi
 
Padrões de Projeto
Padrões de ProjetoPadrões de Projeto
Padrões de Projeto
 

Último

Último (8)

Luís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdfLuís Kitota AWS Discovery Day Ka Solution.pdf
Luís Kitota AWS Discovery Day Ka Solution.pdf
 
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docxATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
ATIVIDADE 1 - CUSTOS DE PRODUÇÃO - 52_2024.docx
 
Padrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemploPadrões de Projeto: Proxy e Command com exemplo
Padrões de Projeto: Proxy e Command com exemplo
 
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docxATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
ATIVIDADE 1 - GCOM - GESTÃO DA INFORMAÇÃO - 54_2024.docx
 
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docxATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
ATIVIDADE 1 - ESTRUTURA DE DADOS II - 52_2024.docx
 
Boas práticas de programação com Object Calisthenics
Boas práticas de programação com Object CalisthenicsBoas práticas de programação com Object Calisthenics
Boas práticas de programação com Object Calisthenics
 
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docxATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
ATIVIDADE 1 - LOGÍSTICA EMPRESARIAL - 52_2024.docx
 
Programação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdfProgramação Orientada a Objetos - 4 Pilares.pdf
Programação Orientada a Objetos - 4 Pilares.pdf
 

Padrão de Projeto - Decorator

  • 1. Padrão Decorator Anexa responsabilidades adicionais a um objeto de maneira dinâmica.
  • 2. Padrão Decorator Para entender melhor, vamos imaginar a seguinte situação... Juliane Silva 2
  • 3. Padrão Decorator Starbuzz Coffee, uma cafeteria famosa, deseja atualizar seu sistema para corresponder a sua oferta de bebidas. Juliane Silva 3
  • 4. Padrão Decorator O que a StarBuzz tem, por enquanto, é... calcularPreco() é abstrato, para que as subclasses definam sua implementação. Juliane Silva 4
  • 5. Padrão Decorator 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. Juliane Silva 5
  • 6. Padrão Decorator Café? Com adicional? Como fazer isso? E dinamicamente? Juliane Silva 6
  • 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. Juliane Silva E quando o preço do leite aumentar? E quando um novo adicional entrar? E quando? E quando?... 7
  • 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. E se o cliente quiser 2x creme? Calcula o preço da bebida + adicionais (super.calcular Preco()). Juliane Silva 8
  • 9. Padrão Decorator Ok... Então, qual é a melhor solução para StarBuzz? Juliane Silva 9
  • 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 10
  • 11. Padrão Decorator Solução 3: padrão Decorator. Vamos começar com uma bebida e “decorá-la” no tempo de execução. 1. Pegar um objeto CafeTradicional. 3. Decorá-lo com um objeto Leite. 2. Decorá-lo com um objeto Choco- 4. Chamar calcularPreco() e contar late. Juliane Silva com a delegação para adicionar o preço da bebida+adicionais. 11
  • 12. Padrão Decorator Mas como se decora? 1. Começamos com o objeto CafeTradicional. calcularPreco() CafeTradicional 2. Criamos um objeto Chocolate e englobamos CafeTradicional nele. calcularPreco() CafeTradicional 3. Criamos um decorador Leite e colocamos Chocolate dentro. calcularPreco() CafeTradicional calcularPreco() Chocolate calcularPreco() Leite calcularPreco() Chocolate Juliane Silva 12
  • 13. Padrão Decorator E como se calcula o preço de tudo isso? calcularPreco() CafeTradicional 3. Chocolate chama calcularPreco() de CafeTradicional. 2. Leite chama calcularPreco() de Chocolate. 1. Chamamos calcularPreco() do decorador externo, Leite. Juliane Silva calcularPreco() Chocolate calcularPreco() Leite 4. CafeTradicional retorna seu valor. 5. Chocolate retorna seu valor + CafeTradicional 6. Leite retorna seu valor + Chocolate, que é o valor total. 13
  • 14. Padrão Decorator Enfim, temos a solução para o nosso problema! Que é representada assim... Componentes aos quais adicionamos dinamicamente um novo comportamento. Os decoradores precisam da mesma interface dos componentes, porque ficam no lugar deles. Os decoradores emglobam um componente. Juliane Silva 14
  • 15. Padrão Decorator E assim... Bebida, a nossa superclasse. Onde calculamos o preço de um CafeTradicional. Juliane Silva 15
  • 16. Padrão Decorator Os decoradores precisam ser do mesmo tipo que as bebidas. Bebida que estamos englobando. Onde calculamos o preço do Chocolate+CafeTradicional. Juliane Silva 16
  • 17. Padrão Decorator Pedido: Um café tradicional, com chocolate, com leite. Resultado... Juliane Silva 17
  • 18. Padrão Decorator 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 dinamicamente em tempo de execução. Juliane Silva 18
  • 19. Padrão Decorator E, ao contrário da herança, que aplica funcionalidade a todos os objetos dela, ele permite aplicar funcionalidades a um objeto específico. Juliane Silva 19