一、Memento模式的目的:
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
二、Memento模式的简单例子:
下面的例子来源于Jdon网站的《GoF设计模式系列》的《Memento模式》,虽然简单却形象地表明了Memento模式的应用
三、Memento模式的特点:
在需要提供保存、恢复对象状态的类中,必须提供两个方法:
.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录。
.恢复对象之前状态的方法:取出备忘录/接收一个备忘录对象,从中获取对象之前的状态
模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.
二、Memento模式的简单例子:
下面的例子来源于Jdon网站的《GoF设计模式系列》的《Memento模式》,虽然简单却形象地表明了Memento模式的应用
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.number;
file = m.file;
}
}
private class Memento implements java.io.Serializable {
private int number;
private File file = null;
public Memento( Originator o){
number = o.number;
file = o.file;
}
}
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.number;
file = m.file;
}
}
private class Memento implements java.io.Serializable {
private int number;
private File file = null;
public Memento( Originator o){
number = o.number;
file = o.file;
}
}
三、Memento模式的特点:
在需要提供保存、恢复对象状态的类中,必须提供两个方法:
.保存对象当前状态方法:将对象自身(this)作为参数传入,创建备忘录。
.恢复对象之前状态的方法:取出备忘录/接收一个备忘录对象,从中获取对象之前的状态
模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.
注意:Memento模式保存的是操作前对象的状态,而不是操作后对象的状态;否则就没办法做恢复了
Memento模式在Jsp+Javabean中的应用
在Jsp应用中,我们通常有很多表单要求用户输入,比如用户注册,需要输入姓名和Email等, 如果一些表项用户没有填写或者填写错误,我们希望在用户按"提交Submit"后,通过Jsp程序检查,发现确实有未填写项目,则在该项目下红字显示警告或错误,同时,还要显示用户刚才已经输入的表项.
如下图中 First Name是用户已经输入,Last Name没有输入,我们则提示红字警告.:
这种技术的实现,就是利用了Javabean的scope="request"或scope="session"特性,也就是Memento模式.