纯JavaScript版本的设计模式之命令模式。
定义
发送者通过命令对象发送命令给接收者。
命令:一个执行某些特定事件的指令。
是一种行为型设计模式。
意义
把请求封装到命令对象中,消除请求发送者和请求接收者之间的耦合关系。
发送者不需要知道接收者是什么样的,怎么处理的。
实践
用函数实现命令模式
智能家居:回家开门后,自动开灯,开空调 。
// 命令1
const openLight3 = () => {
console.log("open light");
};
// 命令2
const openAC = () => {
console.log("open AC");
};
// 宏命令
const openDoor = () => {
console.log("open door after:");
openLight3();
openAC();
};
// 执行命令
openDoor();
宏命令:一组命令的集合,通过执行宏命令的方式,可以一次执行一批命令。
Redux 的撤销重做
实际开发中,我们使用 Redux 来管理项目的各种状态。我觉得一个一个的action很像发出的命令。
发送者:dispatch(type)
命令对象: action(type)
接收者: reducer(state)
不知道这样理解是否正确
Redux支持撤销重做
两个宏命令:Undo, Redo
state结构:
todos: {
//过去状态
past: [
[],
[ { text: 'Use Redux' } ],
[ { text: 'Use Redux', complete: true } ]
],
// 当前状态
present: [ { text: 'Use Redux', complete: true }, { text: 'Implement Undo' } ],
// 未来状态
future: [
[ { text: 'Use Redux', complete: true }, { text: 'Implement Undo', complete: true } ]
]
}
执行宏命令Undo:
- 移除 past 中的最后一个元素。
- 将上一步移除的元素赋予 present。
- 将原来的 present 插入到 future 的最前面。
执行宏命令Redo:
- 移除 future 中的第一个元素。
- 将上一步移除的元素赋予 present。
- 将原来的 present 追加到 past 的最后面。
总结
命令模式在JavaScript语言中是一种隐形的模式,一般用闭包和高阶函数来实现命令模式。
hello,我是杨浅~
生命不息,学习不止,励志写更优雅的代码~
一位初出茅庐的写作小学生,欢迎大神们严厉指正,温柔批评~