类图
Originator就是需要备份的这个类,它是作为备份和恢复动作的发起者;Memento是用于存放需要被保存下来的字段,这些信息是来自于Originator的;Caretaker用于存放Memento的实例;
工程目录
代码
Memento.java
package com.company.pattern.demo14;
/**
*
* @author blazar
*/
public class Memento {
/**
* 需要保存的数据属性
*/
private String state1;
private String state2;
public Memento(String state1, String state2) {
this.state1 = state1;
this.state2 = state2;
}
public String getState1() {
return state1;
}
public void setState1(String state1) {
this.state1 = state1;
}
public String getState2() {
return state2;
}
public void setState2(String state2) {
this.state2 = state2;
}
}
Originator.java
package com.company.pattern.demo14;
/**
* 发起人
* @author blazar
*/
public class Originator {
private String state1;
private String state2;
/**
* 创建备忘录,将当前需要保存的信息导入并实例化一个Memento对象
* @return
*/
public Memento createMemento(){
return new Memento(state1, state2);
}
/**
* 从备忘录中恢复数据
* @param memento
*/
public void setMemento(Memento memento){
state1 = memento.getState1();
state2 = memento.getState2();
}
public void show(){
System.out.println("state1: " + state1);
System.out.println("state2: " + state2);
}
public String getState1() {
return state1;
}
public void setState1(String state1) {
this.state1 = state1;
}
public String getState2() {
return state2;
}
public void setState2(String state2) {
this.state2 = state2;
}
}
Memento.java
package com.company.pattern.demo14;
/**
*
* @author blazar
*/
public class Memento {
/**
* 需要保存的数据属性
*/
private String state1;
private String state2;
public Memento(String state1, String state2) {
this.state1 = state1;
this.state2 = state2;
}
public String getState1() {
return state1;
}
public void setState1(String state1) {
this.state1 = state1;
}
public String getState2() {
return state2;
}
public void setState2(String state2) {
this.state2 = state2;
}
}
测试类 Main.java
package com.company.pattern.demo14;
/**
* 测试类
* @author blazar
*/
public class Main {
public static void main(String[] args) {
Originator originator = new Originator();
originator.setState1("state1-1");
originator.setState2("state2-1");
originator.show();
Caretaker caretaker = new Caretaker();
caretaker.setMemento(originator.createMemento());
// 修改状态
System.out.println("-------------修改状态-------------------------");
originator.setState1("state1-2");
originator.setState2("state2-2");
originator.show();
originator.setMemento(caretaker.getMemento());
// 从备忘录中恢复原来的状态
System.out.println("-----------从备忘录中恢复原来的状态-------------");
originator.show();
}
}
使用场景
一个典型的使用场景,就是我们需要恢复上一步操作;这要求我们将每一步操作都保存下来,放到栈中,当需要恢复的时候,依次出栈即可恢复;
参考《大话设计模式》