【设计模式】行为模式之备忘录Memento

来源:互联网 发布:大连董萍 知乎 编辑:程序博客网 时间:2024/05/19 13:07

备忘录Memento是一种对象行为型设计模式,目的是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样以后就可将该对象恢复到原先保存的状态。

有时有必要记录一个对象的内部状态。为了允许用户取消不确定的操作或从错误中恢复过来,需要实现检查点和取消操作,而要实现这些机制,必须事先将状态信息保存在某处,这样才能将对象恢复到它们先前的状态。但是对象通常封装了其部分或者所有的状态信息,使得其状态不能被其它对象访问,也就不可能在该对象之外保存其状态。而暴露其状态又将违反封装的原则,可能有损应用的可靠性和可扩展性。我们可用备忘录Memento模式解决这一问题。一个备忘录memento是一个对象,它存储另一个对象在某个瞬间的内部状态,而后者称为备忘录的原发器originator。当需要设置原发器的检查点时,取消操作机制会向原发器请求一个备忘录。原发器用描述当前状态的信息初始化该备忘录。只有原发器可以向备忘录中存取信息,备忘录对其它的对象不可见。

下面是备忘录Memento模式的结构图:

这里写图片描述

上图中,备忘录Memento存储原发器对象的内部状态,原发器根据需要决定备忘录存储原发器的哪些内部状态,备忘录防止原发器以外的其它对象访问备忘录,实际上有两个接口,管理者caretaker只能看到备忘录的窄接口,只能将备忘录传递给其它对象,而原发器能够看到一个宽接口,允许它访问返回到先前状态所需的所有数据,理想的情况是只允许生成备忘录的那个原发器访问本备忘录的内部状态。Originator原发器创建一个备忘录,用以记录当前时候它的内部状态,使用备忘录恢复内部状态。Caretaker负责保存好备忘录,不能对备忘录的内容进行操作或检查。一般情况下,管理器向原发器请求一个备忘录,保留一段时间后,将其送回给原发器,有时管理者不会将备忘录返回给原发器,因为原发器可能根本不需要退到先前的状态,备忘录是被动的,只有创建备忘录的原发器会对它的状态进行赋值和检索。

1 0