NOTE

6.22 备忘录模式

1. 定义 保存一个对象的某个状态,以便在适当的时候恢复 CTRL+Z的撤销逻辑可以用到这个 2. UML 3. Java 3.1. 备忘的对象 3.2. 备忘录 - ArticleMemento - ArticleMementoManager 3.3. client

Software Architecture & Engineering约 1 分钟读完historical

这是历史学习笔记,可能存在过时或不完整的理解。

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 查看