备忘录设计模式

备忘录模式又叫作快照模式(Snapshot Pattern)或Token模式,是对象的行为模式程序员

  • 备忘录对象是一个用来存储另一个对象内部状态的快照的对象
  • 备忘录模式的用意是在不破坏封装的条件下,将一个对象的状态捕捉(Capture)住,并外部化,存储起来,从而能够在未来合适的时候把这个对象还原到存储起来的状态
  • 备忘录模式经常与命令模式和迭代子模式一同使用

“白箱”备忘录模式的实现

  • 备忘录角色对任何对象都提供一个接口,即宽接口,备忘录角色的内部所存储的状态就对全部对象公开。所以这个实现又叫作“白箱实现”。
  • “白箱”实现将发起人角色的状态存储在一个你们都看获得的地方,所以是破坏封装性的。可是经过程序员自律,一样能够在必定程度上实现模式的大部分用意。所以白箱实现仍然是有意义的。

“黑箱”备忘录模式的实现

  • 在JAVA语言中,实现双重接口的办法就是将备忘录角色类设计成发起人角色类的内部成员类。
  • 将Memento设成Originator类的内部类,从而将Memento对象封装在Originator里面;
  • 在外部提供一个标识接口MementoIF给Caretaker以及其余对象。
  • 这样,Originator类看到的是Menmento的全部接口,而Caretaker以及其余对象看到的仅仅是标识接口MementoIF所暴露出来的接口。

多重检查点

  • 前面所给出的白箱和黑箱的示意性实现都是只存储一个状态的简单实现,也能够叫作只有一个检查点。常见的系统每每须要存储不止一个状态,而是须要存储多个状态,或者叫作有多个检查点。
  • 备忘录模式能够将发起人对象的状态存储到备忘录对象里面,备忘录模式能够将发起人对象恢复到备忘录对象所存储的某一个检查点上。下面给出一个示意性的、有多重检查点的备忘录模式的实现。

“自述历史”模式

  • 所谓“自述历史”模式(History-On-Self Pattern)实际上就是备忘录模式的一个变种。
  • 在备忘录模式中,发起人(Originator)角色、负责人(Caretaker)角色和备忘录(Memento)角色都是独立的角色。
  • 虽然在实现上备忘录类能够成为发起人类的内部成员类,可是备忘录类仍然保持做为一个角色的独立意义。
  • 在“自述历史”模式里面,发起人角色本身兼任负责人角色。
相关文章
相关标签/搜索