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

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

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


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

适合场景:

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

典型使用场景:

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

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


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

适合场景:

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

典型使用场景:

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

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


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

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

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

相关推荐
多加点辣也没关系19 小时前
设计模式-命令模式
设计模式·命令模式
雪度娃娃2 天前
行为型设计模式——命令模式
c++·设计模式·命令模式
基德爆肝c语言8 天前
Qt:显示类控件
开发语言·qt·命令模式
chao18984410 天前
Qt Modbus TCP 通讯源码
qt·tcp/ip·命令模式
万能菜道人10 天前
EEZ Studio简单运行lvgl
命令模式
ximu_polaris20 天前
设计模式(C++)-行为型模式-命令模式
c++·设计模式·命令模式
其实防守也摸鱼25 天前
GDB安装与配置(保姆级教程)【Linux、Windows系统】
linux·运维·windows·命令模式·工具·虚拟机·调试
其实防守也摸鱼1 个月前
无线网络安全---WLAN相关安全工具--kali(理论附题目)
linux·安全·web安全·学习笔记·kali·命令模式·wlan
sg_knight1 个月前
设计模式实战:命令模式(Command)
python·设计模式·命令模式
yaaakaaang1 个月前
十四、命令模式
java·命令模式