备忘录模式

备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token.

适用场景

  • 保存以及恢复数据相关业务场景

  • 想要恢复到之前的状态

优点

  • 为用户提供一种可恢复的机制

  • 存档信息的封装

缺点

  • 资源占用

下面我们引入一种应用场景,在网站上发表文章的时候,会有一个暂存功能。我们能够暂时保存当前的编辑状态。同时,如果后期有必要的话,我们可以返回之前的状态。

Golang Demo

type Article struct {
  title   string
  content string
}

func NewArticle(title string, content string) *Article {
  return &Article{title: title, content: content}
}

func (a *Article) addToMemento() *ArticleMemento {
  return NewArticleMemento(a.title, a.content)
}

func (a *Article) undoFromMemento(memento *ArticleMemento) {
  a.title = memento.title
  a.content = memento.content

}

Java Demo

定义一个Article 类,用来表示在网站上编写的文章。

编写一个备忘录类,这个类只能由article类创建,并且作为一个article的快照。这也就意味着,这个类不能被其他的类进行修改。

定义一个备忘录管理者的类。利用栈这种数据结构来保存我们之前保存的多个状态。同时,借助栈先进后出的特性,我们能够保证最先出站的状态永远是上一次保存的状态。

UML

备忘录模式UML

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated

Was this helpful?