本文介绍了GoF中的命令模式。
模式推演
个遥控器有多个按钮,用来控制多个设备:
一个遥控器有多个按钮,每个按钮都是按下,或者松开状态,希望可以控制多个设备,并且可以随时进行替换。
首先,我们将变化部分独立出来,就是可以随时替换的控制命令,由于有很多种命令,所以先建立一个命令的基类。
1 | public interface Command{ |
每个命令有一个调用者,就是控制器,有一个接收者,就是设备,将命令传递给控制器的就是用户。
命令支持撤销,支持一次执行多个命令:
进一步,我们需要让命令支持撤销:
1 | public interface Command{ |
支持一次执行多次命令:
1 | public class MacroCommand implements Command { |
定义
命令模式(Command Pattern):将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
类图:
典型例子
- 队列请求:例如iOS中的GCD,每个block都是一个命令。
- 日志请求:数据库的事务操作,一整群操作必须全部完成,或者全部撤销。