文章目录
介绍
描述
备忘录模式设计模式属于行为型模式,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。
特点
优点:可以恢复到之前的状态,实现了信息的封装。
缺点:被备忘的类的成员变量过多,势必会占用比较大的资源,而且每一次保存都会消耗一定的内存。
实现原理
备忘录类Memento,专门存储当前被备忘对象的某些状态,维护CareTaker类存储多个Memento,来方便获取备忘的信息。
适用
-
需要保存/恢复数据的相关状态场景、可进行回滚操作的情况下。
备忘录模式
实现
第一步:创建要被备忘的对象。
// 要被记录的对象
public class Originator {
private String state;
public String getState() {
return state;
}
public void setState(String state) {
this.state = state;
}
// 保存到备忘中
public Memento stateMemento(){
return new Memento(state);
}
// 从备忘中获取 回复
public void getStateFromMemento(Memento memento){
state = memento.getState();
}
}
第二步:创建备忘对象。
// 备忘对象
public class Memento {
private String state;
public Memento(String state) {
this.state = state;
}
public String getState() {
return state;
}
}
第三步:创建备忘集合,可以从中获取指定备忘对象。
// 备忘对象集合
public class CareTaker {
private List<Memento> mementoList = new ArrayList<>();
public void add(Memento memento){
mementoList.add(memento);
}
// 获取
public Memento get(int idx){
return mementoList.get(idx);
}
}
第四步:测试。
public class Test {
public static void main(String[] args) {
Originator originator = new Originator();
CareTaker careTaker = new CareTaker();
originator.setState("state _ 1");
System.out.println("第一次 : " + originator.getState());
// 添加
careTaker.add(originator.stateMemento());
originator.setState("state _ 2");
System.out.println("修改后: " + originator.getState());
originator.getStateFromMemento(careTaker.get(0));
System.out.println("恢复后: " + originator.getState());
/*
* 第一次 : state _ 1
* 修改后: state _ 2
* 恢复后: state _ 1
* */
}
}