组合模式,重点在组合。把一些基本的操作组合成一个复杂的操作集合,以便一个命令执行一系列操作。组合模式的核心不在于封装了一系列操作,而在于封装的一个操作对象可以继续被封装成更复杂的操作集合,一直递归下去
组合模式,重点在组合。把一些基本的操作组合成一个复杂的操作集合,以便一个命令执行一系列操作。组合模式的核心不在于封装了一系列操作,而在于封装的一个操作对象可以继续被封装成更复杂的操作集合,一直递归下去,组合出各种你想要的操作动作集合。
//组合模式/*<html><head><meta http-equiv="content-type" content="text/html;charset=utf-8"><head><body> <button id="btn">点击</button> <script src="group.js"></script></body> </html>*/var MacroCommand = function(){ return { commandList:[], add: function(cmd){ this.commandList.push(cmd); }, execute: function(){ for(var cmd;cmd = this.commandList.shift();){ cmd.execute(); } } }}var openAcCommand = { execute:function(){ console.log('打开空调') } }; var openTvCommand={ execute:function(){ console.log('打开电视'); } } var openSoundCommand={ execute:function(){ console.log('打开音响'); } };var macroCommand1 = MacroCommand(); macroCommand1.add(openAcCommand);macroCommand1.add(openTvCommand);macroCommand1.add(openSoundCommand);// 组合成一个操作组合 macroCommand1.execute(),可以执行该一系列操作var closeDoorCommand = { execute:function(){ console.log('关门'); } }; var openPcCommand = { execute:function(){ console.log('开电脑'); } } var openQQCommand = { execute:function(){ console.log('登录QQ'); } };var macroCommand2 = MacroCommand();macroCommand2.add(closeDoorCommand);macroCommand2.add(openPcCommand);macroCommand2.add(openQQCommand);// 组合成另一个操作组合 macroCommand2.execute(),可以执行该一系列操作var macroCommand = MacroCommand();macroCommand.add(macroCommand2);macroCommand.add(macroCommand1);// 组合成一个大操作组合 macroCommand.execute(),可以执行该一系列操作var btn = (function(element){ element.onclick = function(){ macroCommand.execute(); }})(document.getElementById('btn'))