命令模式

命令模式的定义:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。

命令模式与策略模式在写法上相似,都是使用一个对象保存会使用到的方法,然后在需要的地方调用。

这是一个简单例子:键盘输入为空格或者数字时会把输入展示到屏幕上,提供了两个返回操作

const cache = [];
const firstTime = span.innerText;
const commands = {
    add(value) {
        span.innerText += value;
        cache.push([this.add, value]);
    },
    fresh() {
        span.innerText = firstTime;
        cache.length = 0;
    },
    backto(backNumber) {
        span.innerText = firstTime;
        for (let i = 0; i < backNumber; i++) {
            cache[i][0](cache[i][1]);
        }
    },
};

document.body.addEventListener("keypress", (e) => {
    if (!Number.isNaN(+e.key)) {
        commands.add(e.key);
    }
});
fresh.addEventListener("click", function (event) {
    commands.fresh();
});
back.addEventListener("click", function (event) {
    commands.backto(+backNum.value);
});

命令模式和策略模式的不同

策略模式是为达成同一个目的的算法集合,命令模式是为达成不同目的的方法集合。