O que é o Padrão de Design Composite e como ele funciona em aplicações TypeScript?

Está gostando? Compartilhe

O padrão de design Composite é um padrão estrutural que permite compor objetos em estruturas de árvore para representar hierarquias todo-parte. Ele permite que você trate objetos individuais e composições de objetos de maneira uniforme, permitindo que você trabalhe com eles da mesma maneira.

Como o padrão de design Composite funciona?

O padrão Composite consiste em dois tipos de objetos: objetos individuais (folhas) e objetos compostos (nós). Os objetos individuais representam os elementos mais básicos da estrutura, enquanto os objetos compostos podem ser usados para compor os objetos individuais em uma hierarquia de objetos cada vez maior.

Os objetos compostos mantêm uma lista de referências para seus filhos, permitindo que você adicione, remova e manipule objetos de forma dinâmica. Isso significa que você pode adicionar e remover objetos individuais ou compostos da hierarquia a qualquer momento sem afetar a estrutura geral.

O padrão Composite é útil quando você precisa manipular uma hierarquia de objetos como se fossem objetos individuais. Por exemplo, você pode usar o padrão Composite para representar uma estrutura de diretório em um sistema de arquivos, onde diretórios e arquivos são tratados da mesma maneira. Outro exemplo seria uma interface de usuário hierárquica, onde elementos de interface de usuário podem ser compostos em layouts mais complexos.

Implementando o Padrão de Design Composite em aplicações TypeScript

O padrão Composite pode ser implementado em aplicações TypeScript de várias maneiras, mas uma abordagem comum é a criação de uma interface comum para os objetos que serão parte da hierarquia Composite.

				
					interface Component {
  operation(): void;
}

				
			

A seguir, criamos uma classe base para objetos individuais (folhas):

				
					A seguir, criamos uma classe base para objetos individuais (folhas):
				
			

E uma classe para objetos compostos (nós):

				
					class Composite implements Component {
  private children: Component[] = [];

  add(component: Component): void {
    this.children.push(component);
  }

  remove(component: Component): void {
    const index = this.children.indexOf(component);
    if (index !== -1) {
      this.children.splice(index, 1);
    }
  }

  operation(): void {
    console.log("Composite operation");
    for (const child of this.children) {
      child.operation();
    }
  }
}

				
			

A classe Composite mantém uma lista de Componentes filhos e implementa o método operation() para chamar o mesmo método em cada um dos seus filhos. Além disso, ela fornece os métodos add() e remove() para manipular a lista de filhos.

Agora, podemos criar uma hierarquia Composite, por exemplo:

				
					const root = new Composite();
const node1 = new Composite();
const node2 = new Composite();
const leaf1 = new Leaf();
const leaf2 = new Leaf();
const leaf3 = new Leaf();

root.add(node1);
root.add(node2);
node1.add(leaf1);
node2.add(leaf2);
node2.add(leaf3);

				
			

Aqui, root é o nó raiz, que contém dois nós filhos (node1 e node2). node1 contém uma folha (leaf1), enquanto node2 contém duas folhas (leaf2 e leaf3).

Podemos chamar o método operation() em root para executar uma operação em toda a hierarquia:

				
					root.operation();

				
			

Isso resultaria em uma saída no console semelhante a:

				
					Composite operation
Composite operation
Leaf operation
Leaf operation

				
			

O método operation() é chamado em root, que, em seguida, chama o método em cada um dos seus filhos. Como node1 e node2 são objetos compostos, eles, por sua vez, chamam o método operation() em seus filhos. Como leaf1, leaf2 e leaf3 são objetos individuais, eles executam sua própria implementação do método operation().

Conclusão

O padrão de design Composite é útil quando você precisa tratar objetos individuais e compostos da mesma maneira. Ele permite que você crie hierarquias de objetos compostos em uma estrutura de árvore e execute operações uniformemente em todos os elementos. O TypeScript torna a implementação do padrão Composite fácil e flexível, permitindo que você crie hierarquias complexas de objetos com facilidade.

Espero que este artigo tenha ajudado você a entender o padrão de design Composite e como implementá-lo em aplicações TypeScript. Lembre-se de que o padrão Composite é apenas uma das muitas ferramentas disponíveis para ajudar a criar aplicações escaláveis e flexíveis.

Quer ficar atualizado sobre marketing ?

Assine a nossa newsletter.

Aproveite e Veja Também

DESCUBRA NESSE E-BOOK 5 ESTRATÉGIAS PARA VENDER MUITO NA SUA LOJA DROPSHIPPING.

Você Quer Impulsionar Seu Negócio?

Mande-nos uma mensagem que entramos em contato.

Desenvolvimento de Backend com Node.js, TypeScript, MongoDB e Docker: Práticas Avançadas com TDD, DDD, Clean Architecture e SOLID

DESCUBRA como desenvolver um Backend com Node.js, TypeScript, MongoDB e Docker utilizando práticas avançadas com TDD, DDD, Clean Architecture e SOLID.