知识卡片
撤销功能的两种实现思路
内容
[[命令模式的定义与三个角色]]支持撤销,实现思路分两种:结合备忘录模式还原接收者状态 快照,适合状态场景;把撤销动作定义成新的Command子类,调用接收者的rollBack方法按日志 逆向恢复,适合事件场景。发散:判断该用哪种思路的关键是”接收者本质是状态还是事件”—— 状态可直接拍快照还原,事件通常需要逆向操作抵消效果,两者不能混用。
参考来源
- 位置:《设计模式之禅(第2版)》第15章《命令模式》(源文件:_epub-src/text/part0070.html)
- 结论依据:原文给出撤销问题的两种解法:"结合备忘录模式还原最后状态,该方法适合接收者为状态的变更情况,而不适合事件处理;二是通过增加一个新的命令,实现事件的回滚",并展示CancelDeletePageCommand调用pg.rollBack()的实现。
- 原始内容:有两种方法可以解决:一是结合备忘录模式还原最后状态,该方法适合接收者为状态的变更情况,而不适合事件处理;二是通过增加一个新的命令,实现事件的回滚……事务日志处理是非常繁琐的处理机制,想想数据库的日志处理吧,你就能想象出这个日志有多复杂!