一.什么是备忘录模式
备忘录模式是一种行为设计模式,保存对象的状态,并在适当的时候去恢复该对象的状态。
二.备忘录模式怎么写
备忘录模式有三个类,分别是原始类(Originator)存储原始数据,持有备份对象,可以从备份对象中获取备份状态,
备份类(Memenoto),备份的作用,管理类(CareTaker),起到管理的作用,持有备份类引用,可以从其中获取备份过的状态。我们来看看UML类图
我们来看看代码
/**
* 原始类 持有备份类引用
* @author Seven
*
*/
public class Originator {
public String state;
/**
* 保存状态
* @return
*/
public Memento savetMemento() {
return new Memento(state);
}
/**恢复状态
* @param memento
*/
public void reverseMementoState(Memento memento) {
state=memento.state;
}
}
/**
* 备份类
* @author Seven
*
*/
public class Memento {
public Memento(String state) {
this.state=state;
}
public String state;
}
/**
* 管理者负责存储获取备份对象。
*
* @author Seven
*
*/
public class CareTaker {
private List<Memento> mementoList = new ArrayList();
/**存储备份对象
* @param state
*/
public void add(Memento state) {
mementoList.add(state);
}
/** 获取备份对象
* @param index
* @return
*/
public Memento get(int index) {
return mementoList.get(index);
}
}
测试代码
public class Client {
public static void main(String[] args) {
Originator originator = new Originator(); //创建原始数据
CareTaker careTaker = new CareTaker();
originator.state = "state 1";
originator.state = "state 2";
careTaker.add(originator.savetMemento());//保存原始数据
originator.state = "state 3";
careTaker.add(originator.savetMemento());//保存原始数据
System.out.println("Current State: " + originator.state);
originator.reverseMementoState(careTaker.get(0));//恢复第一种状态
System.out.println("reverse First saved State: : " + originator.state);
originator.reverseMementoState(careTaker.get(1));//恢复第二种状态
System.out.println("reverse First saved State: : " + originator.state);
}
}
打印结果:
Current State: state 3
reverse First saved State: : state 2
reverse First saved State: : state 3
三.小结
备忘录模式的优点:1、给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史的状态。 2、实现了信息的封装,使得用户不需要关心状态的保存细节。缺点就是每一次保存可能会消耗资源。如果您觉得本文对您有所帮助,欢迎点赞或留下评论,如果觉得本文还有不足之处,也欢迎您在下方吐槽,谢谢!