Padrão Composite Definição Compõe objetos em estrutura de árvore para representar hierarquias do tipo todoparte. Este padrão permite que as classes cliente tratem os objetos individuais e as composições de maneira uniforme. 1 Intenção Compor objetos em estruturas de árvore para representarem hierarquias partes-todo. Permite aos clientes tratarem de maneira uniforme objetos individuais e composição de objetos. 2 Aplicabilidade Você pode representar hierarquias partestodo de objetos; Você pode fazer com que os clientes sejam capazes de ignorar a diferença entre composição de objetos e objetos individuais. Os clientes tratarão todos os objetos na estrutura composta de maneira uniforme. 3 Implementação Referências explícitas aos pais; Compartilhamento de componentes; Maximização da interface de componentes; Declaração as operações de gerência de filhos. 4 Participantes I Exemplo Estrutural: Component (componente) Exemplo Concreto: DrawingElement Declara a interface para objetos da composição. Implementa, conforme apropriado, comportamento padrão que seja comum a todas as classes. Declara uma interface para acessar e gerenciar os seus elementos filhos. (opcional) Define uma interface para acessar o pai de um componente na estrutura recursiva, implementando-a se for necessário. 5 Participantes II Exemplo Estrutural: Leaf (Folha) Exemplo Concreto: PrimitiveElement Representa objetos folha na composição, que são aqueles que não possui filhos. Define comportamenteo para objetos primitivos da composição. 6 Participantes III Exemplo estrutural: Composite (composto) Exemplo concreto: CompositeElement Define o comportamento para componentes que possuem filhos. Armazena componentes filhos. Implementa as operações relacionadas aos filhos que foram definidas na interface de Component. 7 Participantes IV Exemplo estrutural: Client (cliente) Exemplo concreto: Aplicação Manipula objetos da composição através da interface Component. 8 Exemplo Estrutural O código estrutural apresenta o padrão composite que permite a criação de uma estrutura de árvore onde cada nó individual é acessado uniformemente sejam eles nó folha ou desvio (branch/compostos). 9 10 Exemplo Concreto Este exemplo a utilização do padrão composite para construir uma estrutura de árvore gráfica composta de nós primitivos (linhas, círculos, etc) e nós compostos (grupos de elementos de desenho que formam elementos mais complexos). 11 12 Consequências Define hierarquias de classes que consistem de objetos primitivos e objetos compostos; Torna o cliente simples; Torna mais fácil de acrescentar novas espécies de componentes; Pode tornar o projeto excessivamente genérico. 13 Padrões Relacionados Freqüentemente, a ligação componente-pai é usada para o padrão Chain of Responsibity. O padrão Decorator é freqüentemente usado com o padrão Composite. Quando decoradores e compostos são usados juntos, eles têm nornalmente uma classe-mãe comum. Assim, decoradores terão que suportar a interface de componente. O Flyweight permite compartilhar componentes, porém este não mais podem referenciar seus pais. O padrão Iterator pode ser usado para percorrer os compostos. o padrão Visitor pode ser usado para localizar operações e comportamentos que seriam de outra forma distribuídos entre classes. 14