19
Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

Embed Size (px)

Citation preview

Page 1: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

Padrão Decorator

Projeto de Sistemas de Software

Hazel, Juliana e Luana

Page 2: 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

Page 3: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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

Page 4: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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

Page 5: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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();

Page 6: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Motivação (3/3)

aBorderDecorator

componentaScrollDecorator

componentaTextView

• Diagrama de objetos

Page 7: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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

Page 8: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Estrutura

ConcreteDecoratorB

Operation()

AddedBehavior()

ConcreteDecoratorA

Operation()

addedState

Component

Operation()

Decorator

Operation()

Decorator

Operation()

ConcreteComponent

Operation() component->Operation()

Decorator::Operation();

AddedBehavior();

component

Page 9: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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

Page 10: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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.

Page 11: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Colaborações

Page 12: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© 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

Page 13: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

Exemplo de código

Page 14: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Estrutura

Page 15: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Abstract Component e Abstract Decorator

Page 16: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Concrete Components

Page 17: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Concrete Decorator

Page 18: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

© LES/PUC-Rio

Testando o Decorator Pattern

Page 19: Padrão Decorator Projeto de Sistemas de Software Hazel, Juliana e Luana

Obrigada!