Você está na página 1de 19

Padro Decorator

Projeto de Sistemas de Software Hazel, Juliana e Luana

Sumrio
Decorator
Introduo/Propsito Motivao Aplicabilidade Estrutura Participantes Colaboraes Conseqncias Exemplo de Cdigo

LES/PUC-Rio

Introduo/Propsito
um padro estrutural
Classificao GoF Compor estruturas complexas

Dinamicamente, agregar responsabilidades adicionais a um objeto Fornecem uma alternativa flexvel ao uso de subclasses para extenso de funcionalidades

LES/PUC-Rio

Motivao (1/3)
Acrescentar responsabilidades a objetos individuais e no a toda uma classe Exemplo: Ferramenta para construo de interfaces grficas de usurio

Duas formas:
Herana
Escolha de propriedades e bordas estaticamente Exploso de classes

Decorator
Embutir o componente em outro objeto que acrescenta a borda

LES/PUC-Rio

Motivao (2/3)
VisualComponent Draw()

TextView Draw()

Decorator Draw()

component component->Draw()

ScrollDecorator Draw() ScrollTo() scrollPosition

BorderDecorator Draw() DrawBorder() borderWidth


Decorator::Draw(); DrawBorder();

LES/PUC-Rio

Motivao (3/3)
Diagrama de objetos
aBorderDecorator component aScrollDecorator component

aTextView

LES/PUC-Rio

Aplicabilidade
Para acrescentar responsabilidades a objetos individuais
De forma dinmica e transparente

Para responsabilidades que podem ser removidas Quando a extenso atravs do uso de subclasses no prtica

LES/PUC-Rio

Estrutura

Component Operation()

ConcreteComponent Operation()

Decorator Operation()

component
component->Operation()

ConcreteDecoratorA Operation() addedState

ConcreteDecoratorB Operation() AddedBehavior()


Decorator::Operation(); AddedBehavior();

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 atribudas

Decorator
Mantm uma referncia para um objeto Component e define uma interface que segue a interface de Component

ConcreteDecorator (BorderDecorator, ScrollDecorator)


Acrescenta responsabilidades ao componente
LES/PUC-Rio

Colaboraes
Decorator repassa solicitaes para o seu objeto Component. Subclasses do Decorator podem extender as solicitaes passadas para seu objeto Component. Opcionalmente, subclasses do Decorator podem executar operaes adicionais antes e depois de repassar a solicitao.

LES/PUC-Rio

Colaboraes

LES/PUC-Rio

Conseqncias
Vantagens
Maior flexibilidade do que a herana esttica Evita classes sobrecarregadas de caractersticas na parte superior da hierarquia

Desvantagens
Um decorator e o seu componente no so idnticos Grande quantidade de pequenos objetos

LES/PUC-Rio

Exemplo de cdigo

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

LES/PUC-Rio

Obrigada!

Você também pode gostar