将对象组合成树形结构,以表示“部分-整体”的层次结构。另外一个好处是通过对象的多态性表现,使得用户对单个对象具有一致性!
万能遥控器
通过组合模式我们实现一个超级万能遥控器、主要功能是把下面三组功能组合到一起一并执行
- 打开空调
- 打开电视和音响
关门、开电脑、登录QQ ```javascript // 组合类 class MacriComMand { constructor() {
this.commandsList = [];
}
add(command) {
this.commandsList.push(command)
} execute() {
for (let i = 0, command; command = this.commandsList[i++];) {
command.execute()
}
} }
class OpenAcCommand{ execute(){ console.log(‘打开空调’) } }
class OpenTvCommad{ execute(){ console.log(‘打开电视’) } }
class OpenSoundCommand{ execute(){ console.log(‘打开音响’) } }
class CloseDoorCommand{ execute(){ console.log(‘关门’) } }
class OpenPcCommad{ execute(){ console.log(‘打开电脑’) } }
class OpenQQCommand{ execute(){ console.log(‘登录QQ’) } }
// 打开空调(功能) let macriComMand1 = new MacriComMand(); macriComMand1.add(new OpenAcCommand()); // 打开电视和音响 let macriComMand2 = new MacriComMand(); macriComMand2.add(new OpenTvCommad()); macriComMand2.add(new OpenSoundCommand()); // 关门、开电脑、登录QQ let macriComMand3 = new MacriComMand(); macriComMand3.add(new OpenPcCommad()); macriComMand3.add(new OpenQQCommand());
/** 组合成超级命令(递归结构) */ let macriComMand = new MacriComMand(); macriComMand.add(macriComMand1) macriComMand.add(macriComMand2) macriComMand.add(macriComMand3)
// 五秒后执行超级命令、 setTimeout( () =>{ macriComMand.execute() },5000) ```