Successfully reported this slideshow.
We use your LinkedIn profile and activity data to personalize ads and to show you more relevant ads. You can change your ad preferences anytime.
Rafael Rocha Cavalcanti
                  blog: faelcavalcanti.wordpress.com
                   e-mail: faelcavalcanti@gma...
Decorator :> Cenário 1
• Necessitamos criar uma cadeia de objetos, em que estes sejam
  responsáveis por novas funcionalid...
Decorator :> Cenário 2

 •   De uma forma análoga ao nosso enfoque, temos que:
     •   Objetivo é separar construção dess...
Decorator :> Estudo de Caso(CyberCafé)

•   Requisitos :: Sistema CyberCafé
    1.   Em uma determinada “CyberCafé” deseja...
Decorator :> Apresentação

•   Padrão também chamado de Wrapper
•   Utilizar quando a herança geraria uma explosão de subc...
Decorator :> Estudo de Caso(CyberCafé)
 o    Solução final após aplicação do padrão! Vamos executar o projeto!




Este é ...
Decorator :> Exercício :: 10 Minutos

•   Vamos revisar aprendendo como usar uma implementação deste
    1.   Abra o arqui...
Decorator :> Exercício :: 10 Minutos

•   Agora que já sabemos como utilizar o padrão decorator, vamos
    implementar um ...
Decorator :> Revisando

•   Vantagens
    •   Possibilita qualquer número de combinações de comportamento
    •   Capacida...
Decorator :> Anexo I :: Pacote java.io
Upcoming SlideShare
Loading in …5
×

Decorator Design Pattern

4,573 views

Published on

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

Published in: Technology, Business
  • Be the first to comment

Decorator Design Pattern

  1. 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. 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. 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. 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. 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. 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. 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. 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. 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. 10. Decorator :> Anexo I :: Pacote java.io

×