JavaScript Design Patterns — Structural — Composite

Nhan Nguyen
2 min readMar 29, 2024

--

The Composite pattern allows the creation of objects with properties that are primitive items or a collection of objects. Each item in the collection can hold other collections themselves, creating deeply nested structures.

In the example below, we create a computing equipment subsystem that is stored in a Cabinet. Each element can be a different instance.

// Equipment
class Equipment {
getPrice() {
return this.price || 0;
}

getName() {
return this.name;
}

setName(name) {
this.name = name;
}
}

class Pattern extends Equipment {
constructor() {
super();
this.equipments = [];
}

add(equipment) {
this.equipments.push(equipment);
}

getPrice() {
return this.equipments
.map(equipment => {
return equipment.getPrice();
})
.reduce((a, b) => {
return a + b;
});
}
}

class Cabbinet extends Pattern {
constructor() {
super();
this.setName('cabbinet');
}
}
// --- leafs ---
class FloppyDisk extends Equipment {
constructor() {
super();
this.setName('Floppy Disk');
this.price = 70;
}
}

class HardDrive extends Equipment {
constructor() {
super();
this.setName('Hard Drive');
this.price = 250;
}
}

class Memory extends Equipment {
constructor() {
super();
this.setName('Memory');
this.price = 280;
}
}

👉 Use this pattern when we want to represent hierarchies of objects.

🚀 A complete example here: https://stackblitz.com/edit/vitejs-vite-8eqxdx?file=main.js

I hope you found it useful. Thanks for reading. 🙏

Let’s get connected! You can find me on:

--

--