美文网首页
备忘录模式,是怎么记住状态的?

备忘录模式,是怎么记住状态的?

作者: 程就人生 | 来源:发表于2022-05-07 22:31 被阅读0次

备忘录模式,是怎么记住状态的,你知道吗?

在什么情况下,我们可以使用备忘录模式?

备忘录模式(Memento Pattern),在不破坏一个对象的前提下,捕获对象的内部状态,并保持在对象外部,以便在需要的时候,恢复该对象状态。它是一种行为型模式。

业务场景:需要保持、恢复数据的相关状态场景。

优点:给用户提供一个恢复状态的机制;缺点:恢复的状态越多,浪费的内存越多。

关键代码:发起人、备忘录类,备忘录管理类。

下面看UML类图:


UML类图说明:Memento是备忘录,负责存储Originator的内部状态。MementoManager是备忘录的管理类,它聚合了Memento备忘录。Originator是发起人,它依赖Memento备忘录类。

三个对象,两种关系。发起人与备忘录类是依赖关系,发起人依赖备忘录类,备忘录类存储它的内部状态。备忘录类与备忘录管理类之间是聚合关系,备忘录管理类聚合了备忘录类。备忘的状态最终交给备忘录管理类保存。

下面看代码实现步骤:
1.备忘录类,负责存储发起人的内部状态;

/**
 * 1. 备忘录类
 * @author 程就人生
 * @Date
 */
public class Memento {
  
    // 需要保存的状态
  private String state;

  public Memento(String state) {
    this.state = state;
  }

  public String getState() {
    return state;
  }
}

2.备忘录管理类,负责管理备忘录类;

import java.util.ArrayList;
import java.util.List;

/**
 * 2.备忘录管理者
 * @author 程就人生
 * @Date
 */
public class MementoManager {

  private List<Memento> mementoList = new ArrayList<Memento>();
  
  // 添加备忘录
  public void addMemento(Memento memento){
    mementoList.add(memento);
  }
  // 获取某一次存储的状态
  public Memento getMemento(int index){
    return mementoList.get(index);
  }
}

3.发起人,负责保存当前的状态;


public static void main(String[] argo){
    // 备忘状态的对象
    Originator originator = new Originator();
    // 备忘录管理者
    MementoManager mementoManager = new MementoManager();
    // 第一次设置的状态
    originator.setState("state #1");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    
    // 第二次设置状态
    originator.setState("state #2");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #3");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #4");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #5");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    
    System.out.println("当前的状态:" + originator.getState());
    
    // 从备忘录中获取所存储的状态
    originator.getStateToMemento(mementoManager.getMemento(1));
    
    System.out.println("恢复到第二次的状态:" + originator.getState());
  }

4.测试代码;

public static void main(String[] argo){
    // 备忘状态的对象
    Originator originator = new Originator();
    // 备忘录管理者
    MementoManager mementoManager = new MementoManager();
    // 第一次设置的状态
    originator.setState("state #1");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    
    // 第二次设置状态
    originator.setState("state #2");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #3");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #4");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    // 第二次设置状态
    originator.setState("state #5");
    // 保存状态到备忘录中
    mementoManager.addMemento(originator.saveStateToMemento());
    
    System.out.println("当前的状态:" + originator.getState());
    
    // 从备忘录中获取所存储的状态
    originator.getStateToMemento(mementoManager.getMemento(1));
    
    System.out.println("恢复到第二次的状态:" + originator.getState());
  }

运行结果:

当前的状态:state #5
恢复到第二次的状态:state #2

这段代码的意思是:发起人更改过很多次状态,每次更改状态时,进行了备忘,并交给备忘录管理类进行管理。如果想恢复某次的状态,则通过备忘录管理类通过索引获取即可。以上便是备忘录模式的简单实现。

最后总结

备忘录模式,强调历史状态的保持与恢复。最主要的类是状态管理的备忘录类和备忘录管理者。

思考题:在日常工作中,你都遇到了哪些备忘录的使用场景?

相关文章

  • 备忘录模式,是怎么记住状态的?

    备忘录模式,是怎么记住状态的,你知道吗? 在什么情况下,我们可以使用备忘录模式? 备忘录模式(Memento Pa...

  • 备忘录模式(Memento Pattern)

    备忘录模式:如果需要对象能返回之前的状态就使用备忘录模式。 备忘录模式是行为性模式之一。备忘录模式包含原发器(Or...

  • Android设计模式之(12)----备忘录模式

    备忘录模式 备忘录模式属于行为模式。 字面意思理解,备忘录是一个存储的东西。备忘录模式主要用于保存对象状态,便于之...

  • 设计模式笔记(18)--备忘录模式

    备忘录模式 备忘录模式可以为一个对象提供状态存储和状态恢复的方法。GOF对备忘录模式的定义是:“在不破坏封装性的前...

  • 备忘录模式

    介绍 备忘录模式是一种行为型模式,该模式用于保存对象当前状态,并且之后可以再次恢复到此状态。备忘录模式实现的方式需...

  • Android设计模式——备忘录模式(十一大行为型)

    1.备忘录模式介绍 备忘录模式是十一大行为型模式之一。 备忘录模式用于保存对象当前状态,并且在之后可以再次...

  • 设计模式备忘录模式

    1.备忘录模式的定义及使用场景备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态...

  • 备忘录模式

    备忘录模式属于状态变化模式。在状态发生改变时,使用备忘录记录当前的状态,如果需要回滚操作,则取出先前记录的状态。在...

  • 设计模式-备忘录模式

    备忘录模式介绍 备忘录模式(Memento Pattern)是一种行为模式。用于保存一个对象的当前状态,以便在适当...

  • Memento Pattern(备忘录模式)

    备忘录模式 备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模...

网友评论

      本文标题:备忘录模式,是怎么记住状态的?

      本文链接:https://www.haomeiwen.com/subject/rdlpyrtx.html