定义
在不破坏封装行的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
结构与说明
Memento : 备忘录。用来存储源发器对象的内部状态
Originator : 源发器。使用备忘录保存某个时刻源发器自身的状态,也可以使用备忘录恢复内部状态
Caretaker : 备忘录管理者,负责存储备忘录对象,以及对备忘录对象的检查
实现
//定义一个备忘录的窄接口,具体实现在源发器的内部类实现
public interface Memento{
}
//源发器类
public class Originator{
public Memento createMementor(){
//一些业务操作
return new MementoImpl();
}
//恢复源发器状态
public void reset(Memento memento){
MementoImpl mem = (MementoImpl)memento;
//恢复的业务流程操作
}
/*
*定义静态内部类,实现窄接口,在源发器内部,就是宽接口啦,静态static方便
*外部使用
*/
private static class MementoImpl implements Memento{
//状态的一些参数
public MementoImpl(...params values){
//存储操作
}
public returnType getState(){
return ....;
}
}
}
public Caretaker{
private Memento memento = null;
public vouid saveMemento(Memento _memento){
this.memento = _memento;
}
public Memento retriveMemento(){
return memento;
}
}
//进行客户端调用
在进行备忘录的实现的时候,当对象数据量特别大,或者用户操作很频繁,以及备忘录数量特别大的时候,都存在很大的性能开销。毕竟,备忘录是使用缓存实现的。
建议备忘录和clone的原型模式一起使用
No Final is final
By Xu.j.h