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?

As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoGabriel Galdino
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDVinicius Buffolo
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidorMarcia Abrahim
 
Apache Cassandra
Apache CassandraApache Cassandra
Apache CassandraLuis Ojeda
 
Aula 07 - Projeto de Topologia e Exercícios - Parte II
Aula 07 - Projeto de Topologia e Exercícios - Parte IIAula 07 - Projeto de Topologia e Exercícios - Parte II
Aula 07 - Projeto de Topologia e Exercícios - Parte IIDalton Martins
 
Histórico e importância de redes de comunicação
Histórico e importância de redes de comunicaçãoHistórico e importância de redes de comunicação
Histórico e importância de redes de comunicaçãoBruno Cesar Silveira Emilio
 
15 padrões de mensageria para integração de sistemas
15 padrões de mensageria para integração de sistemas15 padrões de mensageria para integração de sistemas
15 padrões de mensageria para integração de sistemasHelder da Rocha
 
Redes locales trabajo
Redes locales trabajoRedes locales trabajo
Redes locales trabajomiguelstyle94
 
Servidores Web
Servidores Web Servidores Web
Servidores Web bastosluis
 
Aula 05: Passivos de redes
Aula 05: Passivos de redesAula 05: Passivos de redes
Aula 05: Passivos de redesNilson Mori
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Leinylson Fontinele
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowpichiliani
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de softwareAdriano Tavares
 

Was ist angesagt? (20)

Arquitetura MVC
Arquitetura MVCArquitetura MVC
Arquitetura MVC
 
Bancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geralBancos de dados NoSQL: uma visão geral
Bancos de dados NoSQL: uma visão geral
 
As vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projetoAs vantagens e desvantagens da aplicação de padrões de projeto
As vantagens e desvantagens da aplicação de padrões de projeto
 
Apresentação google
Apresentação googleApresentação google
Apresentação google
 
Conceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBDConceitos de Banco de dados e SGBD
Conceitos de Banco de dados e SGBD
 
Arquitetura cliente servidor
Arquitetura cliente servidorArquitetura cliente servidor
Arquitetura cliente servidor
 
Paradigma Orientado a Objeto
Paradigma Orientado a ObjetoParadigma Orientado a Objeto
Paradigma Orientado a Objeto
 
Apache Cassandra
Apache CassandraApache Cassandra
Apache Cassandra
 
Aula 07 - Projeto de Topologia e Exercícios - Parte II
Aula 07 - Projeto de Topologia e Exercícios - Parte IIAula 07 - Projeto de Topologia e Exercícios - Parte II
Aula 07 - Projeto de Topologia e Exercícios - Parte II
 
Histórico e importância de redes de comunicação
Histórico e importância de redes de comunicaçãoHistórico e importância de redes de comunicação
Histórico e importância de redes de comunicação
 
15 padrões de mensageria para integração de sistemas
15 padrões de mensageria para integração de sistemas15 padrões de mensageria para integração de sistemas
15 padrões de mensageria para integração de sistemas
 
Redes locales trabajo
Redes locales trabajoRedes locales trabajo
Redes locales trabajo
 
Servidores Web
Servidores Web Servidores Web
Servidores Web
 
Aula 05: Passivos de redes
Aula 05: Passivos de redesAula 05: Passivos de redes
Aula 05: Passivos de redes
 
Introdução ao BD Postgre
Introdução ao BD PostgreIntrodução ao BD Postgre
Introdução ao BD Postgre
 
Servidor web
Servidor webServidor web
Servidor web
 
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
Banco de Dados II Aula 07 - Linguagem de Consulta SQL (Comandos DDL)
 
Introdução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlowIntrodução ao Deep Learning com o TensorFlow
Introdução ao Deep Learning com o TensorFlow
 
A importância da arquitetura de software
A importância da arquitetura de softwareA importância da arquitetura de software
A importância da arquitetura de software
 
Arquitetura de sistemas web
Arquitetura de sistemas webArquitetura de sistemas web
Arquitetura de sistemas web
 

Andere mochten auch

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
 

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
 

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