View
104
Download
0
Category
Preview:
Citation preview
Padrão Decorator
Projeto de Sistemas de Software
Hazel, Juliana e Luana
© LES/PUC-Rio
Sumário
• Decorator
– Introdução/Propósito
– Motivação
– Aplicabilidade
– Estrutura
– Participantes
– Colaborações
– Conseqüências
– Exemplo de Código
© LES/PUC-Rio
Introdução/Propósito
• É um padrão estrutural
– Classificação GoF
– Compor estruturas complexas
• Dinamicamente, agregar responsabilidades adicionais a um objeto
• Fornecem uma alternativa flexível ao uso de subclasses para extensão de funcionalidades
© LES/PUC-Rio
Motivação (1/3)
• Acrescentar responsabilidades a objetos individuais e não a toda uma classe
• Exemplo: Ferramenta para construção de interfaces gráficas de usuário
• Duas formas:
– Herança
• Escolha de propriedades e bordas estaticamente
• Explosão de classes
– Decorator
• Embutir o componente em outro objeto que acrescenta a borda
© LES/PUC-Rio
Motivação (2/3)
TextView
Draw()
ScrollDecorator
Draw()
ScrollTo()
scrollPosition
VisualComponent
Draw()
Decorator
Draw()
BorderDecorator
Draw()
DrawBorder()
borderWidth
component
component->Draw()
Decorator::Draw();
DrawBorder();
© LES/PUC-Rio
Motivação (3/3)
aBorderDecorator
componentaScrollDecorator
componentaTextView
• Diagrama de objetos
© LES/PUC-Rio
Aplicabilidade
• Para acrescentar responsabilidades a objetos individuais
– De forma dinâmica e transparente
• Para responsabilidades que podem ser removidas
• Quando a extensão através do uso de subclasses não é prática
© LES/PUC-Rio
Estrutura
ConcreteDecoratorB
Operation()
AddedBehavior()
ConcreteDecoratorA
Operation()
addedState
Component
Operation()
Decorator
Operation()
Decorator
Operation()
ConcreteComponent
Operation() component->Operation()
Decorator::Operation();
AddedBehavior();
component
© LES/PUC-Rio
Participantes
• Component (VisualComponent)– Define a interface para objetos que podem ter
responsabilidades acrescentadas aos mesmos dinamicamente
• ConcreteComponent (TextView)– Define um objeto para o qual responsabilidades adicionais
podem ser atribuídas
• Decorator– Mantém uma referência para um objeto Component e define
uma interface que segue a interface de Component
• ConcreteDecorator (BorderDecorator, ScrollDecorator)– Acrescenta responsabilidades ao componente
© LES/PUC-Rio
Colaborações
• Decorator repassa solicitações para o seu objeto Component.
• Subclasses do Decorator podem extender as solicitações passadas para seu objeto Component.
• Opcionalmente, subclasses do Decorator podem executar operações adicionais antes e depois de repassar a solicitação.
© LES/PUC-Rio
Colaborações
© LES/PUC-Rio
Conseqüências
• Vantagens
– Maior flexibilidade do que a herança estática
– Evita classes sobrecarregadas de características na parte superior da hierarquia
• Desvantagens
– Um decorator e o seu componente não são idênticos
– Grande quantidade de pequenos objetos
Exemplo de código
© LES/PUC-Rio
Estrutura
© LES/PUC-Rio
Abstract Component e Abstract Decorator
© LES/PUC-Rio
Concrete Components
© LES/PUC-Rio
Concrete Decorator
© LES/PUC-Rio
Testando o Decorator Pattern
Obrigada!
Recommended