Skip to main content

Composite

组合模式是一种结构型设计模式, 你可以使用它将对象组合成树状结构, 并且能像使用独立对象一样使用它们

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

getName() {
return this.name;
}

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

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

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

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

class Cabinet extends Composite {
constructor() {
super();
this.setName('cabinet');
}
}

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 = 200;
}
}

const cabinet = new Cabinet();
cabinet.add(new FloppyDisk());
cabinet.add(new HardDrive());
cabinet.add(new Memory());

console.log(cabinet.getPrice(), cabinet.getName(), cabinet);