Java备忘录模式

/ / Java备忘录模式
备忘录模式(Memento)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存着这个状态。这样以后就可将该对象恢复到原先保存的状态,属于行为模式类别。

备忘录模式实例

记忆模式使用三个演员类,备忘录包含要还原的对象的状态,发起者在Memento对象中创建并存储状态,对象负责从Memento恢复对象状态。无涯教程创建了 Memento , Originator 和 CareTaker 类。

演示类 MementoPatternDemo 将使用 CareTaker 和 Originator 对象显示对象状态的恢复。

Memento Pattern UML Diagram

第1步 -  创建Memento类。

Memento.java

public class Memento {
   private String state;

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

   public String getState(){
      return state;
   }	
}

第2步 -  创建Originator类

Originator.java

public class Originator {
   private String state;

   public void setState(String state){
      this.state = state;
   }

   public String getState(){
      return state;
   }

   public Memento saveStateToMemento(){
      return new Memento(state);
   }

   public void getStateFromMemento(Memento memento){
      state = memento.getState();
   }
}

第3步 -  创建CareTaker类

CareTaker.java

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

public class CareTaker {
   private List<Memento> mementoList = new ArrayList<Memento>();

   public void add(Memento state){
      mementoList.add(state);
   }

   public Memento get(int index){
      return mementoList.get(index);
   }
}

第4步 -  使用 CareTaker 和 Originator 对象。

MementoPatternDemo.java

public class MementoPatternDemo {
   public static void main(String[] args) {
   
      Originator originator = new Originator();
      CareTaker careTaker = new CareTaker();
      
      originator.setState("State #1");
      originator.setState("State #2");
      careTaker.add(originator.saveStateToMemento());
      
      originator.setState("State #3");
      careTaker.add(originator.saveStateToMemento());
      
      originator.setState("State #4");
      System.out.println("Current State: " + originator.getState());		
      
      originator.getStateFromMemento(careTaker.get(0));
      System.out.println("First saved State: " + originator.getState());
      originator.getStateFromMemento(careTaker.get(1));
      System.out.println("Second saved State: " + originator.getState());
   }
}

第5步 -  验证输出。

Current State: State #4
First saved State: State #2
Second saved State: State #3

祝学习愉快! (发现内容有误?请选中要编辑的内容 -> 右键 -> 修改 -> 提交!帮助我们改进教程质量)

精选教程推荐

👇 以下精选教程可能对您有帮助,拓展您的技术视野

Rust实战 · 手写下一代云原生消息队列 -〔许文强〕

程序员的测试课 -〔郑晔〕

React Hooks 核心原理与实战 -〔王沛〕

说透芯片 -〔邵巍〕

陶辉的网络协议集训班02期 -〔陶辉〕

打造爆款短视频 -〔周维〕

技术管理案例课 -〔许健〕

数据分析实战45讲 -〔陈旸〕

Java核心技术面试精讲 -〔杨晓峰〕

📝 好记忆不如烂笔头,留下您的学习笔记吧!

暂无学习笔记,成为第一个分享的人吧!

您的笔记将帮助成千上万的学习者