一句话理解:备忘录模式在不暴露对象内部实现的前提下保存状态快照,并在之后恢复该状态。
模式角色
- Originator:拥有状态,创建并恢复备忘录
- Memento:不可变快照
- Caretaker:保存快照,但不解释其内部内容
适合撤销、检查点、回合回滚和编辑器历史记录。
C# 示例:角色快照
Caretaker 只保存
Snapshot,状态含义与恢复规则仍由 PlayerState 管理。快照应该保存什么
保存恢复用的最小充分状态,而不是盲目复制整个 GameObject。引用其他实体时使用稳定 ID,并定义目标已销毁时的行为。随机系统若要精确回放,还需保存随机种子或状态。
内存与性能
完整快照实现简单,但历史很长时占用高。可限制栈长度、按关键帧保存,或记录增量变化。增量方案更省空间,但恢复和版本迁移更复杂。
与存档系统的区别
备忘录关注同一运行版本内的状态捕获与恢复;正式存档还要处理序列化格式、版本迁移、校验、跨设备和长期兼容。两者可以结合,但备忘录本身不是完整存档架构。
与命令模式
命令通过执行反操作实现撤销;备忘录通过恢复旧状态实现撤销。难以可靠反演的操作更适合快照,也可在命令历史中附带备忘录。
小结
备忘录的价值是保住对象封装。真正的设计工作在于确定快照边界、引用身份和历史保留策略。