Your SlideShare is downloading. ×
0
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Decorator Design Pattern
Upcoming SlideShare
Loading in...5
×

Thanks for flagging this SlideShare!

Oops! An error has occurred.

×
Saving this for later? Get the SlideShare app to save on your phone or tablet. Read anywhere, anytime – even offline.
Text the download link to your phone
Standard text messaging rates apply

Decorator Design Pattern

3,798

Published on

Segue uma versão do padrão decorator a ser apresentado em mini-curso

Segue uma versão do padrão decorator a ser apresentado em mini-curso

Published in: Technology, Business
0 Comments
2 Likes
Statistics
Notes
  • Be the first to comment

No Downloads
Views
Total Views
3,798
On Slideshare
0
From Embeds
0
Number of Embeds
1
Actions
Shares
0
Downloads
0
Comments
0
Likes
2
Embeds 0
No embeds

Report content
Flagged as inappropriate Flag as inappropriate
Flag as inappropriate

Select your reason for flagging this presentation as inappropriate.

Cancel
No notes for slide

Transcript

  • 1. Rafael Rocha Cavalcanti blog: faelcavalcanti.wordpress.com e-mail: faelcavalcanti@gmail.com Decorator Pattern Estrutural (GoF) :: Extensão (Metsker) “Anexar responsabilidades adicionais a um objeto dinamicamente. Decorators oferecem uma alternativa flexível ao uso de herança para estender uma funcionalidade." [GoF : Págs:170-179]
  • 2. Decorator :> Cenário 1 • Necessitamos criar uma cadeia de objetos, em que estes sejam responsáveis por novas funcionalidades • A partir daí podemos encadear as funções na ordem desejada Y Z X L E I K D H J C B G A
  • 3. Decorator :> Cenário 2 • De uma forma análoga ao nosso enfoque, temos que: • Objetivo é separar construção dessa cadeia do cliente que a usa • Encadeamento é efetuado na ordem correta necessária ao invés de controles • Esta cadeia sempre inicia c/componente e finaliza c/componente concreto Componente Componente Decorator Decorator Y J L L K J Componente Componente Decorator Concreto Executar Ações K Y Resultado = J + K + L + Y
  • 4. Decorator :> Estudo de Caso(CyberCafé) • Requisitos :: Sistema CyberCafé 1. Em uma determinada “CyberCafé” deseja-se determinar o custo de cafés com ingredientes adicionais, como leite, canela, etc. 2. Sabendo que cada café tem seu preço individual, como efetuar o cálculo deste custo, somando-se a cada ingrediente adicional ? 3. Segue abaixo modelo sugerido de design
  • 5. Decorator :> Apresentação • Padrão também chamado de Wrapper • Utilizar quando a herança geraria uma explosão de subclasses • Classe Decorator é preferivelmente abstrata e possui um Componente • Cada [ConcreteDecorator] executa sua operação e chama operação da classe [Decorador], que por sua vez chama da classe [Componente] Classificação = Estrutural (GoF) e de Extensão (Metsker)
  • 6. Decorator :> Estudo de Caso(CyberCafé) o Solução final após aplicação do padrão! Vamos executar o projeto! Este é um exemplo da série Head First Design Pattern
  • 7. Decorator :> Exercício :: 10 Minutos • Vamos revisar aprendendo como usar uma implementação deste 1. Abra o arquivo [decorator.example.MainJavaIO] e execute-o 2. Refatore cada forma de leitura para um método separado 3. Que tipo de implementações este possui ? 4. Adicione nova implementação que exibe os números em binário • Seguindo mesma abordagem acima, vamos ler, converter e salvar! 1. Implemente um novo algoritmo que consiga ler uma linha inteira  Dica: Utilize BufferReader 2. Agora obtenha o resultado acima e salve-o em um arquivo  Dica 1: Utilize a variável (HelperFile .path + NomeQualquer)  Dica 2: Utilize o encadeamento: PrintWriter - BufferedWriter - FileWriter
  • 8. Decorator :> Exercício :: 10 Minutos • Agora que já sabemos como utilizar o padrão decorator, vamos implementar um gerador de código HTML com proposta abaixo: • Observãções: 1. Crie uma classe Cliente 2. Nas subclasses de componente faça a implementação do método getHTML() seguir as recomendações da W3C 3. Obtenha conteúdo html e passe para método Cliente.gerarHTML()
  • 9. Decorator :> Revisando • Vantagens • Possibilita qualquer número de combinações de comportamento • Capacidade dinâmica de adicionar funções antes ou depois da funcionalidade da classe ComponenteConcreto • Permite alternativa flexível à herança para estender funcionalidade • Adiciona responsabilidades a um objeto e não uma classe inteira • Desvantagens • O Decorador e o objeto incluso não têm a mesma identidade, isto é, a verificação do método equals tende a ser sempre diferente • Fácil de customizar mas pode ser difícil entender e depurar • Em casos que a classe [Componente] encontra-se muito pesada, este passa a ser recomendável utilizar o padrão Strategy
  • 10. Decorator :> Anexo I :: Pacote java.io

×