23种设计模式:备忘录模式
备忘录模式
1.介绍
概念
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
主要作用
在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。
解决的问题
所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
使用场景
1、需要保存/恢复数据的相关状态场景。 2、提供一个可回滚的操作。3.相当于VM虚拟机的快照操作。
(引用自菜鸟教程)
2.实现
背景
创建一个游戏存档类、游戏存档储存类和一个游戏存档管理类,可以实现保存当前游戏游戏状态,以及回到之前保存的状态。
实现步骤
1.创建Archive类
public class Archive {
private String state;
public Archive(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
2.创建Store类
public class Store {
private String state;
public void setState(String state) {
this.state = state;
}
public String getState() {
return state;
}
public Archive saveStateToArchive() {
return new Archive(state);
}
public void getStateFromArchive(Archive archive) {
state = archive.getState();
}
}
3.创建ArchiveManage类
public class ArchiveManage {
private List<Archive> archiveList = new ArrayList<>();
public void add(Archive archive) {
archiveList.add(archive);
}
public Archive get(int index) {
return archiveList.get(index);
}
}
4.创建测试类
public class MementoPatternDemo {
public static void main(String[] args) {
Store store = new Store();
ArchiveManage archiveManage = new ArchiveManage();
store.setState("State #1");
archiveManage.add(store.saveStateToArchive());
store.setState("State #2");
archiveManage.add(store.saveStateToArchive());
store.setState("State #3");
System.out.println("当前存档状态: " + store.getState());
System.out.println("回到状态1: ");
store.getStateFromArchive(archiveManage.get(0));
System.out.println("当前状态: " + store.getState());
System.out.println("回到状态2: ");
store.getStateFromArchive(archiveManage.get(1));
System.out.println("当前状态: " + store.getState());
}
}
5.运行结果
当前存档状态: State #3
回到状态1:
当前状态: State #1
回到状态2:
当前状态: State #2