Padrão de Projeto
Composite
Leandro Alvim
Propósito do Padrão
• Compor objetos em uma estrutura de árvore
– Representar hierarquias de parte-todo
• Tratar objetos e composições de objetos
uniformemente
– Mascarar ao Cliente a manipulação desses
objetos
Motivação - Exemplo
•
•
•
Um figura pode ser
– Linha, retângulo ou texto (primitivas)
Uma figura conter
– Figura (composição de primitivas)
O Cliente quer apenas desenhar a figura
– Aspectos estruturais não são relevantes
• O que é Linha ?
Motivação - Exemplo
• Uma figura é uma composição de uma figura
com primitivas
Estrutura
Participantes
• Component (nó)
– Define a interface para os
objetos da composição
– Implementa o
comportamento de uma
interface comum para
todas as composições e
objetos dessas
composições
– Define uma inetrface para
manipulação e aesso
para os componentes
filhos
• Leaf (nó folha ou
terminal)
– Define o comportamento
do objeto primitivo
– Objeto folha de uma
composição
• Não possui filhos
Participantes
• Composite (nó nãoterminal)
– Armazena componentes
filhos
– Define um
comportamento comum
para os objetos filhos
– Implementa operações da
interface Component que
estão relacionadas aos
seus componentes filhos
• Client
– Manipula objetos que estão
contidos em composições a
partir da interface
Component
Colaborações
Aplicabilidade
• Quando se quer representar hierarquias de
parte-todo
• Quando a distinção entre objetos e
composições de objetos é irrelevante ao
Cliente
– Cliente trata objetos e composições
uniformemente
Conseqüências
• Vantagens
– Traz ao Cliente a simplicidade quanto a utilização
de uma estrutura
• Tratamento semehante para primitivas e composições
– Facilidade quanto a adição de novos componentes
• Não há necessidade de reestruturação do Cliente
• A adição de um novo componente não altera a estrutura
de outras classes da árvore
– Melhor organização dos objetos primitivos
• Objetos complexos são obtidos a partir da composição
de objetos simples
Conseqüências
• Desvantagem
– Quando o Cliente necessita de um conjunto
restrito de componentes que encontram-se
em uma composição
• Solução: Utilizar uma verificação em
tempo de execução
Exemplo de código
Component
Leaf
Exemplo de código
Composite
Exemplo de código
Fim
• [email protected]
Download

Slides - (LES) da PUC-Rio