设计模式之Memento(备忘机制)

王朝java/jsp·作者佚名  2006-01-09
窄屏简体版  字體: |||超大  

设计模式之Memento(备忘机制)板桥里人 http://www.jdon.com 2002/05/05

模式实战书籍《Java实用系统开发指南》

Memento备望录模式定义:

memento是一个保存另外一个对象内部状态拷贝的对象.这样以后就可以将该对象恢复到原先保存的状态.

Memento模式相对也比较好理解,我们看下列代码:

public class Originator {

private int number; private File file = null;

public Originator(){}

// 创建一个Memento

public Memento getMemento(){

return new Memento(this);

}

// 恢复到原始值

public void setMemento(Memento m){

number = m.number;

file = m.file;

}

}

我们再看看Memento类:

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中保存了Originator中的number和file的值. 通过调用Originator中number和file值改变的话,通过调用setMemento()方法可以恢复.

Memento模式的缺点是耗费大,如果内部状态很多,再保存一份,无意要浪费大量内存.

Memento模式在Jsp+Javabean中的应用

在Jsp应用中,我们通常有很多表单要求用户输入,比如用户注册,需要输入姓名和Email等, 如果一些表项用户没有填写或者填写错误,我们希望在用户按"提交Submit"后,通过Jsp程序检查,发现确实有未填写项目,则在该项目下红字显示警告或错误,同时,还要显示用户刚才已经输入的表项.

如下图中 First Name是用户已经输入,Last Name没有输入,我们则提示红字警告.:

这种技术的实现,就是利用了Javabean的scope="request"或scope="session"特性,也就是Memento模式.

具体示例和代码见 JavaWorld的英文原文 , Javabean表单输入特性参见我的另外一篇文章.

 
 
 
免责声明:本文为网络用户发布,其观点仅代表作者个人观点,与本站无关,本站仅提供信息存储服务。文中陈述内容未经本站证实,其真实性、完整性、及时性本站不作任何保证或承诺,请读者仅作参考,并请自行核实相关内容。
 
 
© 2005- 王朝網路 版權所有 導航