← Back to home

Composite

By Pscodium · 8/4/2026 · 2 views

Composite

O Composite é um padrão estrutural utilizado para representar estruturas hierárquicas em forma de árvore.

Ele permite tratar:

  • Objetos individuais.
  • Grupos de objetos.

Da mesma maneira.

Um exemplo clássico é um sistema de arquivos:

Pasta
├── arquivo.txt
├── imagem.png
└── Documentos
    ├── contrato.pdf
    └── currículo.pdf

Uma pasta contém arquivos e outras pastas.


Interface

Criamos:

interface FileSystemItem {
  getSize(): number;
}

Um arquivo é uma folha:

class File
  implements FileSystemItem {

  constructor(
    private size: number
  ) {}

  getSize() {
    return this.size;
  }
}

Uma pasta é um Composite:

class Folder
  implements FileSystemItem {

  private items:
    FileSystemItem[] = [];

  add(item: FileSystemItem) {
    this.items.push(item);
  }

  getSize() {
    return this.items.reduce(
      (total, item) =>
        total + item.getSize(),
      0
    );
  }
}

Podemos criar:

const root =
  new Folder();

root.add(
  new File(100)
);

root.add(
  new File(200)
);

Criamos uma subpasta:

const documents =
  new Folder();

documents.add(
  new File(500)
);

documents.add(
  new File(300)
);

Adicionamos:

root.add(
  documents
);

Agora:

console.log(
  root.getSize()
);

Resultado:

1100

A pasta calcula automaticamente o tamanho de todos os seus filhos.


Exemplo prático

O Composite é muito útil para:

Menus
Componentes de UI
Sistema de arquivos
Árvores de categorias
Estruturas organizacionais
Documentos

Por exemplo:

Menu
├── Home
├── Produtos
│   ├── Eletrônicos
│   └── Roupas
└── Contato

Tanto Produtos quanto Eletrônicos podem implementar a mesma interface.


Quando usar?

Use Composite quando:

  • Você possui estruturas hierárquicas.
  • Objetos podem conter outros objetos.
  • Quer tratar folhas e grupos da mesma forma.

A ideia principal é:

Permitir tratar objetos individuais e composições de objetos através da mesma interface.



Comments

No comments yet.