0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

設(shè)計(jì)模式:備忘錄設(shè)計(jì)模式

冬至子 ? 來源:墨風(fēng)如雪小站 ? 作者:墨風(fēng)如雪 ? 2023-06-06 11:19 ? 次閱讀

模式描述

備忘錄設(shè)計(jì)模式(Memento Design Pattern)是一種行為型設(shè)計(jì)模式,它的主要目的是在不破壞對(duì)象封裝性的前提下,捕捉和保存一個(gè)對(duì)象的內(nèi)部狀態(tài),以便稍后可以將對(duì)象恢復(fù)到該狀態(tài)。這種模式通常用于實(shí)現(xiàn)撤銷和重做操作。

主要角色

1、備忘錄(Memorandum) :保存了發(fā)起人的狀態(tài),從而能夠在適當(dāng)?shù)臅r(shí)候恢復(fù)狀態(tài)。2. 發(fā)起人(Originator) :創(chuàng)建一個(gè)備忘錄,以表示其當(dāng)前狀態(tài),并可以從備忘錄中恢復(fù)狀態(tài)。

引用場(chǎng)景

1.后退/前進(jìn):瀏覽器的后退/前進(jìn)就是緩存頁面狀態(tài)的典型例子。2.撤銷/重做:通常基于備忘錄模式實(shí)現(xiàn)撤銷和重做操作。3.快照:保存某個(gè)時(shí)間點(diǎn)對(duì)象的狀態(tài)快照。

設(shè)計(jì)要點(diǎn)

1.僅僅存儲(chǔ)狀態(tài):備忘錄僅存儲(chǔ)對(duì)象的內(nèi)部狀態(tài),而不是存儲(chǔ)對(duì)象的引用。2.完全封裝:外部不會(huì)訪問到備忘錄類。3.避免權(quán)限問題:發(fā)起人應(yīng)該具有創(chuàng)建和訪問備忘錄的權(quán)限。

優(yōu)缺點(diǎn)

?輕松實(shí)現(xiàn)對(duì)象狀態(tài)的快照和恢復(fù)?分離了對(duì)象與狀態(tài)的保存與恢復(fù)過程?需要額外的空間來存儲(chǔ)狀態(tài)

與備忘錄模式類似的模式

?原型模式:對(duì)一個(gè)對(duì)象進(jìn)行克隆,產(chǎn)生一個(gè)與原對(duì)象類似的新對(duì)象。

Java代碼示例

首先,我們創(chuàng)建一個(gè)發(fā)起人(Originator)類,它具有保存和恢復(fù)狀態(tài)的能力:

publicclassOriginator{
privateString state;


publicvoid setState(String state){
this.state = state;
}


publicString getState(){
return state;
}


publicMemento saveStateToMemento(){
returnnewMemento(state);
}


publicvoid getStateFromMemento(Memento memento){
        state = memento.getState();
}
}

接下來,我們創(chuàng)建備忘錄(Memento)類,用于保存發(fā)起人的狀態(tài):

publicclassMemento{
privateString state;


publicMemento(String state){
this.state = state;
}


publicString getState(){
return state;
}
}

現(xiàn)在,我們創(chuàng)建一個(gè)負(fù)責(zé)人(Caretaker)類,用于管理備忘錄:

import java.util.ArrayList;
import java.util.List;


publicclassCaretaker{
privateList< Memento > mementoList =newArrayList<  >();


publicvoid add(Memento state){
        mementoList.add(state);
}


publicMementoget(int index){
return mementoList.get(index);
}
}

最后,我們?cè)谥黝愔惺褂眠@些類:

publicclassMementoPatternDemo{
publicstaticvoid main(String[] args){
Originator originator =newOriginator();
Caretaker caretaker =newCaretaker();


        originator.setState("State #1");
        originator.setState("State #2");
        caretaker.add(originator.saveStateToMemento());


        originator.setState("State #3");
        caretaker.add(originator.saveStateToMemento());


        originator.setState("State #4");
System.out.println("Current State: "+ originator.getState());


        originator.getStateFromMemento(caretaker.get(0));
System.out.println("First saved State: "+ originator.getState());
        originator.getStateFromMemento(caretaker.get(1));
System.out.println("Second saved State: "+ originator.getState());
}
}

擴(kuò)展知識(shí)點(diǎn)

備忘錄模式與命令模式(Command Pattern)可以結(jié)合使用,以實(shí)現(xiàn)更加強(qiáng)大的撤銷/重做功能。命令模式可以用來記錄操作的順序和執(zhí)行操作,而備忘錄模式用來記錄操作前后的狀態(tài)。這樣一來,我們可以輕松地在操作序列中向前或向后移動(dòng),同時(shí)還可以保留每個(gè)操作的上下文信息。

聲明:本文內(nèi)容及配圖由入駐作者撰寫或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • JAVA
    +關(guān)注

    關(guān)注

    19

    文章

    2943

    瀏覽量

    104096
  • JAVA語言
    +關(guān)注

    關(guān)注

    0

    文章

    138

    瀏覽量

    20025
收藏 人收藏

    評(píng)論

    相關(guān)推薦

    恩智浦與Cohda無線簽署CAR 2 CAR通信聯(lián)盟“諒解備忘錄

    恩智浦半導(dǎo)體和Cohda的無線今天宣布,他們已經(jīng)簽署的CAR 2 CAR通信聯(lián)盟”諒解備忘錄”(MOU)。該備忘錄旨在確保歐洲車與車之間,或是汽車和交通基礎(chǔ)設(shè)施間,無線通訊科技技術(shù)的實(shí)施和統(tǒng)一
    發(fā)表于 04-17 10:10 ?894次閱讀

    HarmonyOS開發(fā)實(shí)例:【手機(jī)備忘錄

    基于用戶首選項(xiàng),實(shí)現(xiàn)了備忘錄新增、更新、刪除以及查找等功能。
    的頭像 發(fā)表于 04-18 21:40 ?627次閱讀
    HarmonyOS開發(fā)實(shí)例:【手機(jī)<b class='flag-5'>備忘錄</b>】

    PostgreSQL操作備忘錄

    PostgreSQL 操作備忘錄
    發(fā)表于 05-23 08:48

    UDS診斷命令備忘錄

    UDS實(shí)踐性強(qiáng),邏輯復(fù)雜,很多服務(wù)非要體驗(yàn)過一次才能理解,導(dǎo)致包括我在內(nèi)的初學(xué)者感覺晦澀難懂,不明覺厲,因此將自己的理解寫下來、整理下來,與君共勉。零、UDS診斷命令備忘錄一、簡(jiǎn)介UDS
    發(fā)表于 08-26 16:09

    怎樣去搭建一種基于XR806的開源桌面備忘錄

    本人計(jì)劃懟一個(gè)開源桌面備忘錄/天氣預(yù)報(bào)/相冊(cè)的項(xiàng)目基于XR806,同時(shí)學(xué)習(xí)鴻蒙操作系統(tǒng)獲得暈哥贈(zèng)送的開發(fā)板和芯片,目前處于環(huán)境搭建階段看起來這個(gè)芯片玩的人比較少,目前遇到了問題,不知道如何解決,希望
    發(fā)表于 12-28 06:52

    全球半導(dǎo)體聯(lián)盟與中國(guó)半導(dǎo)體行業(yè)簽署合作備忘錄

    全球半導(dǎo)體聯(lián)盟與中國(guó)半導(dǎo)體行業(yè)簽署合作備忘錄 全球半導(dǎo)體聯(lián)盟(GSA)與中國(guó)半導(dǎo)體行業(yè)協(xié)會(huì)(CSIA)在蘇州聯(lián)合申明簽署合作備忘錄。此次合作將為促
    發(fā)表于 09-24 08:17 ?662次閱讀

    是德科技與中國(guó)移動(dòng)簽署諒解備忘錄

    是德科技(NYSE:KEYS)今日宣布與中國(guó)移動(dòng)通信集團(tuán)有限公司(CMCC)簽署諒解備忘錄(MoU)將全力支持 5G 終端先行者計(jì)劃的實(shí)施。
    的頭像 發(fā)表于 07-19 11:01 ?4770次閱讀

    戴姆勒與百度簽署諒解備忘錄

    7月25日,奔馳母公司戴姆勒與百度簽署諒解備忘錄,深化雙方在自動(dòng)駕駛和車聯(lián)網(wǎng)等領(lǐng)域的戰(zhàn)略合作。
    的頭像 發(fā)表于 07-28 09:53 ?2650次閱讀

    嵌入式軟件設(shè)計(jì)模式 好文值得收藏

    ) ? 03)C語言和設(shè)計(jì)模式(狀態(tài)模式) ? 04)C語言和設(shè)計(jì)模式(命令模式) ? 05)C語言和設(shè)計(jì)模式(解釋器
    的頭像 發(fā)表于 06-20 09:09 ?1881次閱讀

    Vedanta與30家日本公司簽署諒解備忘錄

    印度Vedanta Group已與30家日本公司簽署諒解備忘錄,以開發(fā)印度半導(dǎo)體和玻璃顯示器制造生態(tài)系統(tǒng)。上周在日本東京舉行的2022年Vedanta-Avanstrate商業(yè)合作伙伴峰會(huì)上簽署了這些備忘錄,來自100多家全球公司的200多名代表出席了峰會(huì)。
    的頭像 發(fā)表于 12-15 09:12 ?908次閱讀

    設(shè)計(jì)模式行為型:備忘錄模式

    備忘錄模式(Memento Pattern)保存一個(gè)對(duì)象的某個(gè)狀態(tài),以便在適當(dāng)?shù)臅r(shí)候恢復(fù)對(duì)象。備忘錄模式屬于行為型模式。
    的頭像 發(fā)表于 06-07 11:16 ?748次閱讀
    設(shè)計(jì)<b class='flag-5'>模式</b>行為型:<b class='flag-5'>備忘錄</b><b class='flag-5'>模式</b>

    新思科技同越南政府簽署諒解備忘錄

    在越南總理范明政訪美期間,新思科技與越南國(guó)家創(chuàng)新中心(nic)簽署了關(guān)于培養(yǎng)越南集成電路設(shè)計(jì)人才的諒解備忘錄,支持nic成立芯片設(shè)計(jì)孵化中心。另外,新思科技與越南信息通訊部下屬的信息通信技術(shù)產(chǎn)業(yè)公司簽訂了支援越南半導(dǎo)體產(chǎn)業(yè)發(fā)展的諒解備忘錄。
    的頭像 發(fā)表于 09-20 10:56 ?1450次閱讀

    實(shí)踐GoF的23種設(shè)計(jì)模式備忘錄模式

    相對(duì)于代理模式、工廠模式等設(shè)計(jì)模式,備忘錄模式(Memento)在我們?nèi)粘i_發(fā)中出鏡率并不高,除了應(yīng)用場(chǎng)景的限制之外,另一個(gè)原因,可能是
    的頭像 發(fā)表于 11-25 09:05 ?445次閱讀
    實(shí)踐GoF的23種設(shè)計(jì)<b class='flag-5'>模式</b>:<b class='flag-5'>備忘錄</b><b class='flag-5'>模式</b>

    億緯鋰能與Aksa簽署諒解備忘錄,共建土耳其合資公司

    根據(jù)這份諒解備忘錄, 億緯鋰能和Aksa同意在土耳其設(shè)立一個(gè)合資企業(yè)。至于合資企業(yè)的股權(quán)結(jié)構(gòu)、管理模式、融資途徑等具體內(nèi)容將在未來的合資協(xié)議中予以詳述。
    的頭像 發(fā)表于 01-16 10:22 ?456次閱讀

    蘋果iOS 18將支持語音備忘錄及數(shù)學(xué)符號(hào)顯示

    首先是語音備忘錄功能。據(jù)悉,蘋果有意在iOS 18系統(tǒng)中加入此項(xiàng)功能,使iPhone用戶能夠便捷地錄制音頻文件,并將其直接嵌入至備忘錄之中。
    的頭像 發(fā)表于 04-18 11:14 ?380次閱讀