Composite é um padrão de projeto estrutural que permite compor objetos em estruturas de árvore e permitir que os clientes trabalhem com essas estruturas como se fossem objetos individuais. O padrão Composite só faz sentido quando seu modelo de negócios pode ser representado como uma árvore.
- Estrutura Básica:
- Exemplo Composição de Arquivos:
- Imagine que você trabalha em uma empresa que armazena produtos e caixas, cada caixa pode conter um ou vários produtos, com um ou mais caixas dentro desses produtos e assim sucessivamente, dessa forta dentro de uma caixa maior você terá várias caixas menores com produtos. Agora imagine que você quer saber o valor total de produtos dentro dessas várias caixas.
- O Composite sugere tratar os tipos diferentes de produtos e caixas por meio de uma interface comum que tem o método
getPrice()
, dessa forma é possível percorrer todos eles e fazer uma somatória de valor e recuperar o resultado que se necessita.
- Simplifica o código do cliente que precisa interagir com uma estrutura de árvore complexa.
- Facilita a adição de novos tipos de componentes.
- Cria um design de classe muito geral.
⛔ - Quando você precisa implementar uma estrutura semelhante a uma árvore que possui elementos e contêineres simples.
✔️ - O padrão Composite oferece dois elementos básicos: folhas simples e contêineres complexos que armazenam outras folhas ou contêineres, e assim por diante. O padrão força os contêineres a trabalhar com todos os elementos filhos por meio da interface comum, o que permite executar operações recursivamente em toda a estrutura da árvore.
⛔ - Quando os clientes devem tratar elementos simples e complexos de maneira uniforme.
✔️ - Graças à interface comum entre folhas e contêineres, o código do cliente não precisa se preocupar com o tipo de objeto com o qual trabalha.