SlideShare ist ein Scribd-Unternehmen logo
1 von 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

Weitere ähnliche Inhalte

Was ist angesagt?

Seguranca da Informação - VPN
Seguranca da Informação - VPNSeguranca da Informação - VPN
Seguranca da Informação - VPN
Luiz Arthur
 

Was ist angesagt? (20)

Exercícios - Herança - Java
Exercícios - Herança - JavaExercícios - Herança - Java
Exercícios - Herança - Java
 
Blockchain no setor elétrico: conceitos, potenciais aplicações e iniciativas
Blockchain no setor elétrico: conceitos, potenciais aplicações e iniciativasBlockchain no setor elétrico: conceitos, potenciais aplicações e iniciativas
Blockchain no setor elétrico: conceitos, potenciais aplicações e iniciativas
 
Protocolos de Rede para Internet das Coisas
Protocolos de Rede para Internet das CoisasProtocolos de Rede para Internet das Coisas
Protocolos de Rede para Internet das Coisas
 
Sistema operacional de tempo real rtos
Sistema operacional de tempo real   rtosSistema operacional de tempo real   rtos
Sistema operacional de tempo real rtos
 
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
 
Seguranca da Informação - VPN
Seguranca da Informação - VPNSeguranca da Informação - VPN
Seguranca da Informação - VPN
 
Aprendizado de máquina
Aprendizado de máquinaAprendizado de máquina
Aprendizado de máquina
 
Introdução a Cloud Computing
Introdução a Cloud ComputingIntrodução a Cloud Computing
Introdução a Cloud Computing
 
Criptografia
CriptografiaCriptografia
Criptografia
 
Machine Learning - Introdução e Aplicações
Machine Learning - Introdução e AplicaçõesMachine Learning - Introdução e Aplicações
Machine Learning - Introdução e Aplicações
 
Sistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOASistemas Distribuídos: RMI, CORBA e SOA
Sistemas Distribuídos: RMI, CORBA e SOA
 
Samuel_Complicações_agudas
Samuel_Complicações_agudasSamuel_Complicações_agudas
Samuel_Complicações_agudas
 
Computação nas nuvens
Computação nas nuvensComputação nas nuvens
Computação nas nuvens
 
Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)Sistemas Operacionais - Aula 07 (Thread e Processos)
Sistemas Operacionais - Aula 07 (Thread e Processos)
 
Diabetes
DiabetesDiabetes
Diabetes
 
Diabetes mellitus
Diabetes mellitusDiabetes mellitus
Diabetes mellitus
 
SI - SAD - Sistemas de Arquivos Distribuídos
SI - SAD  - Sistemas de Arquivos DistribuídosSI - SAD  - Sistemas de Arquivos Distribuídos
SI - SAD - Sistemas de Arquivos Distribuídos
 
Aula 2 introdução a sistemas distribuídos
Aula 2   introdução a sistemas distribuídosAula 2   introdução a sistemas distribuídos
Aula 2 introdução a sistemas distribuídos
 
SI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas DistribuidosSI - Introdução a Sistemas Distribuidos
SI - Introdução a Sistemas Distribuidos
 
A Importância, os Mecanismos e a Segurança de um SO
A Importância, os Mecanismos e a Segurança de um SOA Importância, os Mecanismos e a Segurança de um SO
A Importância, os Mecanismos e a Segurança de um SO
 

Andere mochten auch (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
 

Kürzlich hochgeladen

Kürzlich hochgeladen (6)

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

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