設(shè)計(jì)模式之Memento(備忘機(jī)制)
板橋里人 http://www.jdon.com 2002/05/05
Memento備望錄模式定義:
memento是一個(gè)保存另外一個(gè)對(duì)象內(nèi)部狀態(tài)拷貝的對(duì)象.這樣以后就可以將該對(duì)象恢復(fù)到原先保存的狀態(tài).
Memento模式相對(duì)也比較好理解,我們看下列代碼:
public class Originator { private int number; private File file = null; public Originator(){} // 創(chuàng)建一個(gè)Memento // 恢復(fù)到原始值 } ? |
我們?cè)倏纯碝emento類(lèi):
private class Memento implements java.io.Serializable{ private int number; private File file = null; public Memento( Originator o){ number = o.number; } }
|
可見(jiàn) Memento中保存了Originator中的number和file的值. 通過(guò)調(diào)用Originator中number和file值改變的話,通過(guò)調(diào)用setMemento()方法可以恢復(fù).
Memento模式的缺點(diǎn)是耗費(fèi)大,如果內(nèi)部狀態(tài)很多,再保存一份,無(wú)意要浪費(fèi)大量?jī)?nèi)存.
Memento模式在Jsp+Javabean中的應(yīng)用
在Jsp應(yīng)用中,我們通常有很多表單要求用戶輸入,比如用戶注冊(cè),需要輸入姓名和Email等, 如果一些表項(xiàng)用戶沒(méi)有填寫(xiě)或者填寫(xiě)錯(cuò)誤,我們希望在用戶按"提交Submit"后,通過(guò)Jsp程序檢查,發(fā)現(xiàn)確實(shí)有未填寫(xiě)項(xiàng)目,則在該項(xiàng)目下紅字顯示警告或錯(cuò)誤,同時(shí),還要顯示用戶剛才已經(jīng)輸入的表項(xiàng).
如下圖中 First Name是用戶已經(jīng)輸入,Last Name沒(méi)有輸入,我們則提示紅字警告.:
這種技術(shù)的實(shí)現(xiàn),就是利用了Javabean的scope="request"或scope="session"特性,也就是Memento模式.
具體示例和代碼見(jiàn) JavaWorld的英文原文 , Javabean表單輸入特性參見(jiàn)我的另外一篇文章.
?