150 likes | 238 Views
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
E N D
Padrão de ProjetoComposite 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
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ão-terminal) • 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
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
Fim • leandrouff@gmail.com