快照模式 vs 命令模式:一篇分清什么时候用谁

在做带撤销、回滚、历史记录的功能时,我们最常纠结两个设计模式:快照模式(备忘录模式)命令模式 。很多同学容易混淆,其实核心区别一句话就能记住:
快照存数据,命令存动作。

下面用最清晰、最好记的方式,对比两者适用场景,看完就能直接选型。


一、快照模式(存数据 / 状态)

适合场景:

  • 状态简单、操作少
  • 不想写复杂的反向 undo 逻辑
  • 状态结构很轻量(比如一个数字、一段短文本)
  • 不需要精细撤销,只想一键回到某一刻
  • 对内存占用不太敏感,存档即可

典型使用场景:

  • 游戏存档/读档
  • 配置文件一键恢复
  • 简单文本编辑器的整体撤销

一句话总结:
状态小、懒得写反向 → 快照


二、命令模式(存动作 / 操作)

适合场景:

  • 操作种类多(增、删、改、拖、画等)
  • 需要一步步撤销 / 重做
  • 状态体积大(图片、大型文档、画布),频繁存快照太占内存
  • 需要记录操作日志、任务队列、宏命令

典型使用场景:

  • Photoshop、Figma、画板工具
  • IDE 代码编辑器 Ctrl+Z
  • 复杂表单操作历史
  • 支持宏命令、任务队列的系统

一句话总结:
操作多、状态大、要精细撤销 → 命令


三、终极口诀(记住就够)

  • 状态小、懒得写反向 → 快照
  • 操作多、状态大、要精细撤销 → 命令

理解到这一步,面试、日常开发选型都能说得清清楚楚,再也不会纠结用哪个了。

相关推荐
金融支付架构实战指南18 天前
CQRS + 命令模式 + 事件驱动 + 数据库持久化
数据库·ddd·命令模式·领域驱动模型
金融支付架构实战指南18 天前
CQRS 命令 vs GOF 命令模式
ddd·命令模式·领域驱动模型
hoiii18719 天前
Qt 实现屏幕截图功能
开发语言·qt·命令模式
Jun62620 天前
QT(2)-通过管道关联CMD
开发语言·qt·命令模式
Drone_xjw20 天前
Qt国际化多语言配置详解-入门到精通
开发语言·qt·命令模式
多加点辣也没关系1 个月前
设计模式-命令模式
设计模式·命令模式
雪度娃娃1 个月前
行为型设计模式——命令模式
c++·设计模式·命令模式
基德爆肝c语言2 个月前
Qt:显示类控件
开发语言·qt·命令模式
chao1898442 个月前
Qt Modbus TCP 通讯源码
qt·tcp/ip·命令模式
万能菜道人2 个月前
EEZ Studio简单运行lvgl
命令模式