Patrón Composite

¿Qué es el Patrón Composite?

El Composite es un patrón de diseño estructural que permite tratar objetos individuales y compuestos de manera uniforme. Es útil para representar estructuras de jerarquías como árboles y para realizar operaciones en todo un grupo de objetos de manera uniforme.

Código de Ejemplo en JavaScript

            
class Component {
  add(component) {
    throw new Error("Este método debe ser implementado por subclases.");
  }

  remove(component) {
    throw new Error("Este método debe ser implementado por subclases.");
  }

  display(indent) {
    throw new Error("Este método debe ser implementado por subclases.");
  }
}

class Leaf extends Component {
  constructor(name) {
    super();
    this.name = name;
  }

  display(indent = 0) {
    console.log(`${' '.repeat(indent)}- ${this.name}`);
  }
}

class Composite extends Component {
  constructor(name) {
    super();
    this.name = name;
    this.children = [];
  }

  add(component) {
    this.children.push(component);
  }

  remove(component) {
    this.children = this.children.filter(child => child !== component);
  }

  display(indent = 0) {
    console.log(`${' '.repeat(indent)}+ ${this.name}`);
    this.children.forEach(child => child.display(indent + 2));
  }
}

// Uso del Patrón Composite
const root = new Composite("Raíz");
const branch1 = new Composite("Rama 1");
const branch2 = new Composite("Rama 2");

const leaf1 = new Leaf("Hoja 1");
const leaf2 = new Leaf("Hoja 2");
const leaf3 = new Leaf("Hoja 3");

branch1.add(leaf1);
branch1.add(leaf2);
branch2.add(leaf3);

root.add(branch1);
root.add(branch2);

root.display();

        

Casos de Uso

  • Representar jerarquías como sistemas de archivos con carpetas y archivos.
  • Trabajar con estructuras de árbol en aplicaciones gráficas o de datos.
  • Realizar operaciones sobre un conjunto de objetos de manera uniforme.

Patrones Relacionados

  • Decorator: Agrega responsabilidades dinámicamente, mientras que Composite organiza jerarquías.
  • Iterator: Proporciona una manera de recorrer estructuras jerárquicas como Composite.
  • Flyweight: Optimiza estructuras que contienen muchos objetos similares.
Whatsapp Mentores Tech