命令模式将请求命令封装为一个对象,这样可以使用不同的请求参数化其他对象(将不同请求依赖注入到其他对象),并且能够支持请求命令的排队执行、记录日志、撤销等附加控制功能。
- Receiver 接收命令的接收对象
- Command 命令对象
- Invoker 调用命令的对象
对于电视机,我们可以通过两种方式打开电视机:
- 电视机上的开关键
- 遥控器上的开关键
在这个例子中:
- Receiver 是电视
- Command 是 ON 这个命令
- Invoker 是真实的调用者,电视机上的开关键或遥控器上的开关键
命令模式与策略模式的区别:
在策略模式中,不同的策略具有相同的目的、不同的实现、互相之间可以替换。比如,BubbleSort、SelectionSort 都是为了实现排序的,只不过一个是用冒泡排序算法来实现的,另一个是用选择排序算法来实现的。而在命令模式中,不同的命令具有不同的目的,对应不同的处理逻辑,并且互相之间不可替换。