NOTE
6.22 备忘录模式
1. 定义 保存一个对象的某个状态,以便在适当的时候恢复 CTRL+Z的撤销逻辑可以用到这个 2. UML 3. Java 3.1. 备忘的对象 3.2. 备忘录 - ArticleMemento - ArticleMementoManager 3.3. client
这是历史学习笔记,可能存在过时或不完整的理解。
1. 定义
保存一个对象的某个状态,以便在适当的时候恢复 CTRL+Z的撤销逻辑可以用到这个
2. UML
3. Java
3.1. 备忘的对象
public class Article
{
private String title;
private String content;
public Article(String title, String content)
{
this.title = title;
this.content = content;
}
public String getTitle()
{
return title;
}
public void setTitle(String title)
{
this.title = title;
}
public String getContent()
{
return content;
}
public void setContent(String content)
{
this.content = content;
}
public ArticleMemento saveToMemento()
{
return new ArticleMemento(this.title, this.content);
}
public void undoFromMemento(ArticleMemento memento)
{
this.title = memento.getTitle();
this.content = memento.getContent();
}
@Override
public String toString()
{
return "Article{" + "title='" + title + '\'' + ", content='" + content + '\'' + '}';
}
}
3.2. 备忘录
- ArticleMemento
public class ArticleMemento
{
private String title;
private String content;
public ArticleMemento(String title, String content)
{
this.title = title;
this.content = content;
}
public String getTitle()
{
return title;
}
public String getContent()
{
return content;
}
}
- ArticleMementoManager
public class ArticleMemento
{
private String title;
private String content;
public ArticleMemento(String title, String content)
{
this.title = title;
this.content = content;
}
public String getTitle()
{
return title;
}
public String getContent()
{
return content;
}
}
3.3. client
public class Client
{
public static void main(String[] args)
{
Article article = new Article("标题1", "内容1");
System.out.println("最开始:" + article);
ArticleMemento articleMemento = article.saveToMemento();
ArticleMementoManager mementoManager = new ArticleMementoManager();
mementoManager.addMemento(articleMemento);
article.setContent("内容2");
article.setTitle("标题2");
System.out.println("修改之后:" + article);
ArticleMemento memento = mementoManager.getMemento();
article.undoFromMemento(memento);
System.out.println("从备忘录中恢复:" + article);
}
}
讨论
使用 GitHub 账号参与讨论,评论会保存在 GitHub Issues 中。在 GitHub 查看