Java设计模式 _行为型模式_备忘录模式
// 1、定义数据格式
public interface Memento1 {
String getData();
void setData(String data);
}
// 2、定义实现类,即备忘录对象
public class MementoBook implements Memento1 {
String data; // 备忘录记录data数据
public MementoBook(String data) {
this.data = data;
}
@Override
public String getData() {
return data;
}
@Override
public void setData(String data) {
this.data = data;
}
}
// 3、定义操作对象,记录数据,记录备忘录,封装回溯方法
import lombok.Data;
import java.util.ArrayList;
import java.util.List;
@Data
public class Originator {
String data; // 操作数据
List<MementoBook> mementoBooks; // 备忘录集合
public Originator() {
mementoBooks = new ArrayList<>();
}
public void saveData(String data) { // 保存操作数据
this.data = data;
mementoBooks.add(new MementoBook(data));
}
public void revoke() { // 返回上一次操作的数据
this.data = mementoBooks.get(mementoBooks.size() - 2).getData();
mementoBooks = mementoBooks.subList(0, mementoBooks.size() - 1);
}
public void revokeHistory(int index) { // 返回到历史指定的数据
this.data = mementoBooks.get(index - 1).getData();
mementoBooks = mementoBooks.subList(0, index);
}
}
// 4、测试
public static void main(String[] args) {
Originator originator = new Originator();
originator.saveData("1");
originator.saveData("2");
originator.saveData("3");
originator.saveData("4");
originator.saveData("5");
originator.saveData("6");
originator.saveData("7");
originator.saveData("8");
originator.saveData("9");
originator.saveData("10");
System.out.println("当前值:"+originator.getData());
originator.revoke();
System.out.println("撤回一步的值:"+originator.getData());
originator.revoke();
System.out.println("撤回一步的值:"+originator.getData());
originator.revokeHistory(5);
System.out.println("测绘到第5步当时的值:"+originator.getData());
}