再一次,javascript设计模式与开发实践-命令模式

简述

将函数的调用、请求和操作封装成一个单一的对象,然后对这个对象进行一系列的处理。

最常见的场景是:有时候需要向某些对象发送请求,但是并不知道请求的接收者是谁,也不知道被请求的操作是什么。
此时希望用一种松耦合的方式来设计程序,那么用命令模式来消除两者的耦合关系。

使用场景

  • 编辑器
  • 操作记录
  • ..

案例

宏命令是一组命令的集合,可以一次执行一批命令,想象一下家里有个万能遥控器,每天回到家只要按一个特别的按钮,就会自动帮我们关上门,自动打开电脑、登录QQ什么的,下面是一个宏命令方式的命令模式实现。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
var closeDoorCommand = {
    execute: function () {
        console.log('关门');
    }
};

var openPCCommand = {
    execute: function () {
        console.log('开电脑');
    }
};

var MacroCommand = function () {
    return {
        commandList: [],
        add        : function (command) {
            this.commandList.push(command);
        },
        execute    : function () {
            for (var i = 0, command; command = this.commandList[i++];) {
                command.execute();
            }
        }
    }
};

var macroCommand = MacroCommand();
macroCommand.add(closeDoorCommand);
macroCommand.add(openPCCommand);

macroCommand.execute();