命令模式的定义:将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式与策略模式在写法上相似,都是使用一个对象保存会使用到的方法,然后在需要的地方调用。
这是一个简单例子:键盘输入为空格或者数字时会把输入展示到屏幕上,提供了两个返回操作
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);
});
命令模式和策略模式的不同
策略模式是为达成同一个目的的算法集合,命令模式是为达成不同目的的方法集合。