行为型模式之备忘录MEMENTO

来源:互联网 发布:win10怎么安装c语言 编辑:程序博客网 时间:2024/05/17 17:43

一、意图

在不破坏封装性情况下,在对象之外保存该对象的内部状态,实现可撤销回原来状态。

二、图解

为实现撤销机制,我们需要先保存对象的内部状态,当需要撤销时,恢复成过去的状态。但是由于有些对象的某些状态是私有的,不可向外暴露,使得其状态不能被其他对象访问。因此我们需要对象内部自己生成备忘录,但存储在外部。
这里写图片描述
如上,原发器Originator是需要保存状态的对象,Memento是保存Originator状态的备忘录,Caretaker是管理者。
这里写图片描述
当我们想保存先前状态时,Careteaker向Originator发送请求备忘录;Originator创建Memento对象(包含Originator的内部状态)并返回备忘录;当用户想要取消操作,Careteaker将Memento对象传递给Originator恢复以前状态。

三、其他

  1. 使用备忘录可能代价很高,如果备忘录需要拷贝大量信息。
  2. 如果备忘录的创建及其返回(给它们的原发器)的顺序是可预测的,
    备忘录可以仅存储原发器内部状态的增量改变
  3. 备忘录一般只有原发器能够生成,管理者只能传递其给其他对象。
0 0