命令模式可以将回调函数实现得更加优雅
在游戏开发中,角色需要响应玩家对输入设备的操作,比如通过键盘来操控角色向不同方向移动,使用不同的动作等等,这些响应可以被回调函数来描述,但是回调函数常常存在以下问题
- 与事件类型耦合
- 与角色特征耦合
- 难以实现撤销操作
- 难以进行组合和编排
而使用命令模式,则可以将回调函数的逻辑抽象出来,使用命令这种媒介,来将输入设备的事件和程序中的主体联系起来,开发命令时,我们只需要关注事件和主体之间的逻辑关系,而在主体中,则需要针对命令来进行相关的逻辑实现,预示我们的事件不再与主体相耦合,命令成为了事件到主体之间的媒介。
针对无状态的命令,一般实现为单例,而对于有状态的命令,往往在每次执行时都会进行命令实例的创建以及状态的初始化,常见的例子就是将多个命令按照特定顺序进行组合,以及支持 undo 和 redo。