<rt id="bn8ez"></rt>
<label id="bn8ez"></label>

  • <span id="bn8ez"></span>

    <label id="bn8ez"><meter id="bn8ez"></meter></label>

    posts - 262,  comments - 221,  trackbacks - 0

    一、“Mementor”模式和“堆棧”的結(jié)合-“GUI界面撤銷功能”的實(shí)現(xiàn)

    ·當(dāng)用戶在面板中拖動一個組件到編輯區(qū)時,應(yīng)用程序?yàn)榫庉媴^(qū)創(chuàng)建一個備忘錄,并把它加入到一個堆棧中(注意此時備忘錄中包含的是操作前的狀態(tài),而非操作后的狀態(tài))

    ·當(dāng)用戶單擊“撤銷”按鈕時,應(yīng)用程序就將堆棧頂部的備忘錄彈出,然后將編輯區(qū)恢復(fù)為該備忘錄所記錄的狀態(tài)

    當(dāng)可視化應(yīng)用程序啟動后,首先向空的堆棧中壓入一個初始的空備忘錄,并且保證絕對不會將該備忘錄從棧中彈出,從而確保該棧的頂部總是有一個有效的備忘錄。當(dāng)棧中僅包含一個備忘錄的時候,應(yīng)用程序應(yīng)當(dāng)禁用“撤銷”按鈕

    二、“Mementor”模式和“Observer”模式的結(jié)合-“通知式恢復(fù)”

    在某些情況下,我們希望為GUI組件注冊一些監(jiān)聽器,當(dāng)組件的狀態(tài)發(fā)生改變時,可以通知所有對它感興趣的監(jiān)聽器,這種情況我們可以用“Observer”模式來實(shí)現(xiàn)。

    還是以我們上面的例子來說:假如用戶從面板中拖動一個組件到編輯區(qū)后,有幾個監(jiān)聽器對它感興趣,并且采取了相應(yīng)的操作,現(xiàn)在用戶單擊了“撤銷”按鈕,那么我們應(yīng)該把這個事件通知所有監(jiān)聽器,告訴他們必須恢復(fù)之前所有的狀態(tài)。這種情況就可以把兩種模式結(jié)合起來使用:

    ·當(dāng)對象被創(chuàng)建時,激活并為該對象注冊監(jiān)聽器(觀察著),監(jiān)聽器創(chuàng)建一個初始化備忘錄,保存編輯區(qū)的原始信息
    ·當(dāng)對象(被觀察著)被銷毀(用戶單擊“撤銷”按鈕時),向所有注冊的監(jiān)聽器發(fā)送信息
    ·監(jiān)聽器(觀察者)接收到信息,從備忘錄中取出編輯區(qū)信息的備忘錄,恢復(fù)當(dāng)前編輯區(qū)的狀態(tài)

    三、“Mementor”模式和“Observer”模式、“責(zé)任鏈”模式的結(jié)合-“鏈?zhǔn)酵ㄖ謴?fù)”

    在上面我們提到了將“Mementor”模式和“Observer”模式結(jié)合起來達(dá)到到“通知式恢復(fù)”的效果,考慮下面一個情況:

    如果我們在安裝一個軟件或執(zhí)行一個長時間、多次交互的情況,加入用戶在最后一個操作中選擇了“取消”操作,我們應(yīng)該怎么做呢?

    我的想法是在為每一次操作創(chuàng)建一個備忘錄,并將其放在“責(zé)任鏈”上,當(dāng)最后用戶選擇取消時,沿著這條“責(zé)任鏈”一個個通知觀察者,由觀察者取出備忘錄,執(zhí)行恢復(fù)工作。

    注意:這個方法和第二個方法有點(diǎn)區(qū)別:第二個方法不管恢復(fù)的順序,而第三種方法適合講究恢復(fù)順序的情況,例如前面提到的軟件安裝的撤銷。

    四、“Mementor”模式和“Flyweight”模式的結(jié)合:減少相同對象的拷貝

    用于保存對象狀態(tài)的“備忘錄”對象,必須擁有一份和被保存對象相同的屬性拷貝。

    對于“備忘錄”有可能導(dǎo)致內(nèi)存消耗過大的情況,如果對象中的屬性是“公用的”(即多個對象可以共享一個屬性),那么我們可以考慮采用“享元模式”,減少相同屬性對象的創(chuàng)建。但是這個方法對于屬性多為運(yùn)行時確定的情況作用不大。



    -------------------------------------------------------------
    生活就像打牌,不是要抓一手好牌,而是要盡力打好一手爛牌。
    posted on 2008-03-22 17:59 Paul Lin 閱讀(1738) 評論(1)  編輯  收藏 所屬分類: 模式與重構(gòu)


    FeedBack:
    # re: 設(shè)計模式總結(jié)-Memento模式(二)
    2008-08-13 03:19 | shawnliu
    寫的很不錯
    有點(diǎn)功力  回復(fù)  更多評論
      
    <2008年3月>
    2425262728291
    2345678
    9101112131415
    16171819202122
    23242526272829
    303112345

    常用鏈接

    留言簿(21)

    隨筆分類

    隨筆檔案

    BlogJava熱點(diǎn)博客

    好友博客

    搜索

    •  

    最新評論

    閱讀排行榜

    評論排行榜

    主站蜘蛛池模板: 理论亚洲区美一区二区三区| 国产精品酒店视频免费看| 久久久久亚洲精品无码蜜桃| 中文字幕日本人妻久久久免费| 亚洲香蕉网久久综合影视| 成人免费一区二区三区| 亚洲无人区一区二区三区| 国产精品永久免费| 国产AV无码专区亚洲AV手机麻豆| 国产无限免费观看黄网站| 亚洲自偷自偷偷色无码中文| a级毛片免费完整视频| 人人狠狠综合久久亚洲婷婷| 久久免费精品视频| 亚洲人成网址在线观看| 四虎在线免费视频| 亚洲国产精品免费观看| 麻豆精品国产免费观看| 免费福利资源站在线视频| 亚洲人AV永久一区二区三区久久| 黄视频在线观看免费| 亚洲国产精品成人精品无码区 | 亚洲精品电影在线| 免费看污成人午夜网站| 亚洲人成人无码.www石榴| 俄罗斯极品美女毛片免费播放| fc2免费人成在线视频| 久久精品国产亚洲沈樵| 最近2019中文字幕免费大全5| 亚洲婷婷第一狠人综合精品| 国产网站在线免费观看| 国产成人无码免费看片软件| 久久久久亚洲精品影视| 国产精品入口麻豆免费观看| 亚洲精品天堂成人片AV在线播放| 亚洲成AⅤ人影院在线观看| 成人精品一区二区三区不卡免费看| 久久精品蜜芽亚洲国产AV| 18禁成年无码免费网站无遮挡| 国产亚洲精品仙踪林在线播放| 精品国产亚洲一区二区在线观看|