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
Próximos SlideShares
Carregando em…5
×

Decorator Design Pattern

4.470 visualizações

Publicada em

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

Publicada em: Tecnologia, Negócios
0 comentários
2 gostaram
Estatísticas
Notas
  • Seja o primeiro a comentar

Sem downloads
Visualizações
Visualizações totais
4.470
No SlideShare
0
A partir de incorporações
0
Número de incorporações
1.163
Ações
Compartilhamentos
0
Downloads
0
Comentários
0
Gostaram
2
Incorporações 0
Nenhuma incorporação

Nenhuma nota no slide

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

×