SlideShare une entreprise Scribd logo
1  sur  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

Contenu connexe

Tendances

Apostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaApostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaDaniel Silveira
 
Introdução a Sistemas Distribuídos
Introdução a Sistemas DistribuídosIntrodução a Sistemas Distribuídos
Introdução a Sistemas DistribuídosVictor Hazin da Rocha
 
Boas Práticas em Design de Interfaces
Boas Práticas em Design de InterfacesBoas Práticas em Design de Interfaces
Boas Práticas em Design de InterfacesFelipe Almeida
 
Introdução à adminstração revisão para av 1
Introdução à adminstração revisão para av 1Introdução à adminstração revisão para av 1
Introdução à adminstração revisão para av 1Cariocabear
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de CódigoRicardo Terra
 
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...Wankes Leandro
 
LIDERANÇA E MOTIVAÇÃO DE EQUIPES
LIDERANÇA E MOTIVAÇÃO DE EQUIPESLIDERANÇA E MOTIVAÇÃO DE EQUIPES
LIDERANÇA E MOTIVAÇÃO DE EQUIPESRutileia Feliciano
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Priscila Ribeiro Chagas
 
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...Samuel Cavalcante
 
Liderança e gestão de pessoas em ambientes competitivos
Liderança e gestão de pessoas em ambientes competitivosLiderança e gestão de pessoas em ambientes competitivos
Liderança e gestão de pessoas em ambientes competitivosLuciana Rezende
 
Ciclo de Vida Clássico da Engenharia de Software
Ciclo de Vida Clássico da Engenharia de SoftwareCiclo de Vida Clássico da Engenharia de Software
Ciclo de Vida Clássico da Engenharia de SoftwareEduardo Santos
 
02 introdução ao open gl
02 introdução ao open gl02 introdução ao open gl
02 introdução ao open glAuberto Macie
 
Funções básicas do Administrador
Funções básicas do AdministradorFunções básicas do Administrador
Funções básicas do AdministradorHelio Kenji Honda
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de DadosFelipeCaiuby
 

Tendances (20)

Feedback Canvas
Feedback CanvasFeedback Canvas
Feedback Canvas
 
Apostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiulaApostilas - cliente servidor - aula 1 - fabiula
Apostilas - cliente servidor - aula 1 - fabiula
 
SRE passo a passo
SRE passo a passoSRE passo a passo
SRE passo a passo
 
Introdução a Sistemas Distribuídos
Introdução a Sistemas DistribuídosIntrodução a Sistemas Distribuídos
Introdução a Sistemas Distribuídos
 
Boas Práticas em Design de Interfaces
Boas Práticas em Design de InterfacesBoas Práticas em Design de Interfaces
Boas Práticas em Design de Interfaces
 
NoSQL Basics and MongDB
NoSQL Basics and  MongDBNoSQL Basics and  MongDB
NoSQL Basics and MongDB
 
Introdução à adminstração revisão para av 1
Introdução à adminstração revisão para av 1Introdução à adminstração revisão para av 1
Introdução à adminstração revisão para av 1
 
Análise Estática de Código
Análise Estática de CódigoAnálise Estática de Código
Análise Estática de Código
 
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...
Processo de gestão de portfólio na vida real: como eles funcionam - Prof. Wan...
 
LIDERANÇA E MOTIVAÇÃO DE EQUIPES
LIDERANÇA E MOTIVAÇÃO DE EQUIPESLIDERANÇA E MOTIVAÇÃO DE EQUIPES
LIDERANÇA E MOTIVAÇÃO DE EQUIPES
 
Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?Histórias de Usuário: Como escrever a história perfeita?
Histórias de Usuário: Como escrever a história perfeita?
 
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...
Herói ou vilão, a cultura dos heróis e seu impacto nas organizações - TDC...
 
Política de Grupo - Active Directory
Política de Grupo - Active DirectoryPolítica de Grupo - Active Directory
Política de Grupo - Active Directory
 
Liderança e gestão de pessoas em ambientes competitivos
Liderança e gestão de pessoas em ambientes competitivosLiderança e gestão de pessoas em ambientes competitivos
Liderança e gestão de pessoas em ambientes competitivos
 
Ciclo de Vida Clássico da Engenharia de Software
Ciclo de Vida Clássico da Engenharia de SoftwareCiclo de Vida Clássico da Engenharia de Software
Ciclo de Vida Clássico da Engenharia de Software
 
02 introdução ao open gl
02 introdução ao open gl02 introdução ao open gl
02 introdução ao open gl
 
Funções básicas do Administrador
Funções básicas do AdministradorFunções básicas do Administrador
Funções básicas do Administrador
 
Tuning Banco de Dados
Tuning Banco de DadosTuning Banco de Dados
Tuning Banco de Dados
 
Perfil comportamental
Perfil comportamentalPerfil comportamental
Perfil comportamental
 
Fundamentos da Engenharia de Software
Fundamentos da Engenharia de SoftwareFundamentos da Engenharia de Software
Fundamentos da Engenharia de Software
 

En vedette

O Mítico Homem-Mês
O Mítico Homem-MêsO Mítico Homem-Mês
O Mítico Homem-MêsJuliane Silva
 
Decorator - Padrões de projeto
Decorator - Padrões de projetoDecorator - Padrões de projeto
Decorator - Padrões de projetoEduardo Mendes
 
Decorator Design Pattern
Decorator Design PatternDecorator Design Pattern
Decorator Design Patternfaelcavalcanti
 
Arquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry PiArquitetura ARM - Raspberry Pi
Arquitetura ARM - Raspberry PiJuliane Silva
 

En vedette (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
 

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