一、Memento模式的目的:
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
二、Memento模式的简单例子:
package memento;
import java.io.File;
public class Originator {
private int number;
private File file = null;
public Originator(){
}
// 创建一个Memento,将自身作为参数传入
public Memento getMemento(){
return new Memento(this);
}
//从Memento中取出保存的数据,恢复为原始状态
public void setMemento(Memento m){
number = m.getNumber();
file = m.getFile();
}
public int getNumber() {
return number;
}
public void setNumber(int number) {
this.number = number;
}
public File getFile() {
return file;
}
public void setFile(File file) {
this.file = file;
}
}
package memento;
import java.io.File;
import java.io.Serializable;
public class Memento implements Serializable {
private int number;
private File file = null;
public Memento(Originator o){
this.number = o.getNumber();
this.file = o.getFile();
}
public int getNumber() {
return this.number;
}
public void setNumber(int number) {
this.number = number;
}
public File getFile() {
return this.file;
}
public void setFile(File file) {
this.file = file;
}
}
三、Memento模式的特点:
在需要提供保存、恢复对象状态的类中,必须提供两个方法:
1.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录,也就通过
public Memento getMemento(){
return new Memento(this);
}
来构造一个Memento的对象,Memento类有一个带参的构造方法,参数为要保存的对象,这样,Memento对象就保存了Originator对象的属性
2.恢复对象之前状态的方法:,待Originator对象操作完成之后,通过
public void setMemento(Memento m){
number = m.getNumber();
file = m.getFile();
}
来传入之前构造的Memento对象,来恢复Originator原来对象的状态
该模式模式的缺点是耗费大,如果内部状态很多,再保存一份,无疑要浪费大量内存.
[img][/img]
参考 http://zuoqiang.iteye.com/blog/744024