备忘录模式
备忘录模式(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

补充另一个版本的Java/Scala Demo 以及源码解析
Java Demo_
Scala Demo
UML_
源码解析
Last updated
Was this helpful?