命令模式 (Command)
将操作封装为对象。RTS的单位指令序列、格斗游戏的按键缓冲、回放和撤销都基于此。一个command队列记录一切。
命令模式将每个操作封装为独立对象——包含执行方法和撤销方法。RTS 游戏用命令队列实现单位指令序列(移动到A→攻击B→巡逻C),格斗游戏用命令缓冲实现连招判定,几乎所有游戏的 Undo/Redo 和 Replay(录像回放)都基于命令模式。
游戏录像是命令模式最经典的应用。与其录制每一帧的画面(视频),不如录制每一帧的玩家输入。回放时把输入重新输入游戏引擎,得到完全一致的结果。这就是为什么很多游戏的录像文件只有几十 KB——它存的是指令,不是视频。
实现:定义一个 ICommand 接口(Execute + Undo),每种操作(移动、攻击、使用道具)实现该接口。CommandInvoker 维护一个命令队列,按序执行并保存历史。需要回放时从第一个命令重新执行即可。
💡 微信搜索「别装没看见」小程序,44+ 开发技巧随时翻阅