劍心博客

          Just for java

            BlogJava :: 首頁(yè) :: 新隨筆 :: 聯(lián)系 :: 聚合  :: 管理 ::
            1 隨筆 :: 29 文章 :: 1 評(píng)論 :: 0 Trackbacks

          設(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
            public Memento getMemento(){
              return new Memento(this);
            }

            // 恢復(fù)到原始值
            public void setMemento(Memento m){
               number = m.number;
               file = m.file;
            }

          }

          ?

          我們?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;
              file = o.file;

            }

          }


          可見(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)我的另外一篇文章.

          ?

          posted on 2006-12-11 19:49 powerwind 閱讀(154) 評(píng)論(0)  編輯  收藏 所屬分類(lèi): 轉(zhuǎn)來(lái)好帖java設(shè)計(jì)模式
          主站蜘蛛池模板: 马山县| 江北区| 福州市| 上林县| 曲水县| 陆川县| 庆安县| 壶关县| 德昌县| 夏津县| 宁蒗| 大同市| 博野县| 当涂县| 湟中县| 交口县| 沂水县| 靖远县| 芜湖市| 广东省| 红河县| 浪卡子县| 上高县| 宁国市| 普兰店市| 吉林市| 涟源市| 上杭县| 离岛区| 天全县| 茌平县| 斗六市| 长丰县| 广元市| 松滋市| 东乡族自治县| 通化县| 肥西县| 婺源县| 微山县| 贡嘎县|