亚洲乱码中文字幕综合,中国熟女仑乱hd,亚洲精品乱拍国产一区二区三区,一本大道卡一卡二卡三乱码全集资源,又粗又黄又硬又爽的免费视频

Java設(shè)計(jì)模式初識(shí)之備忘錄模式詳解

 更新時(shí)間:2022年11月04日 09:21:01   作者:程序員翔仔  
備忘錄設(shè)計(jì)模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于實(shí)現(xiàn)防丟失、撤銷、恢復(fù)等功能。本文將通過示例為大家介紹一些備忘錄模式的定義與使用,需要的可以參考一下

簡(jiǎn)介

備忘錄設(shè)計(jì)模式(Memento Design Pattern)也叫作快照(Snapshot)模式,主要用于實(shí)現(xiàn)防丟失、撤銷、恢復(fù)等功能。

其定義是,在不違背封裝原則的前提下,捕獲一個(gè)對(duì)象的內(nèi)部狀態(tài),并在該對(duì)象之外保存這個(gè)狀態(tài),以便之后恢復(fù)對(duì)象先前的狀態(tài)。

典型實(shí)現(xiàn)

首先,定義一個(gè)備忘錄 Memento 類存儲(chǔ)狀態(tài),其代碼示例如下:

public class Memento {
    private String state;
 
    public Memento(Originator o) {
        this.state = o.getState();
    }
 
    public void setState(String State) {
        this.state = state;
    }
 
    public String getState() {
        return this.state;
    }
}

然后,把需要被存儲(chǔ)狀態(tài)的對(duì)象稱作為發(fā)起者,定義為 Originator 類,包含用于存儲(chǔ)成員數(shù)據(jù)的屬性,其代碼示例如下:

public class Originator {
    private String state;
 
    public Originator() {}
 
    // 創(chuàng)建一個(gè)備忘錄對(duì)象
    public Memento createMemento() {
        return new Memento(this);
    }
 
    // 根據(jù)備忘錄狀態(tài)恢復(fù)原發(fā)器狀態(tài)
    public void restoreMemento(Memento m) {
        state = m.getState();
    }
 
    public void setState(String State) {
        this.state = state;
    }
 
    public String getState() {
        return this.state;
    }
}

定義一個(gè)負(fù)責(zé)人 Caretaker 用于管理備忘錄對(duì)象,其代碼示例如下:

public class Caretaker {
    private Memento memento;
 
    public Memento getMemento() {
        return this.memento;
    }
 
    public void setMemento(Memento memento) {
        this.memento = memento;
    }
}

總結(jié)

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

備忘錄模式的主要優(yōu)點(diǎn)如下:

給用戶提供了一種可以恢復(fù)狀態(tài)的機(jī)制,可以使用戶能夠比較方便地回到某個(gè)歷史的狀態(tài)

實(shí)現(xiàn)了內(nèi)部狀態(tài)的封裝,使得用戶不需要關(guān)心狀態(tài)的保存細(xì)節(jié)

缺點(diǎn)

備忘錄模式的主要缺點(diǎn)如下:

如果要保存的內(nèi)部狀態(tài)信息過多或者特別頻繁,將會(huì)占用比較大的內(nèi)存資源

適用場(chǎng)景

備忘錄模式的適用場(chǎng)景如下:

保存一個(gè)對(duì)象在某一時(shí)刻的全部狀態(tài)或部分狀態(tài),方便后續(xù)實(shí)現(xiàn)恢復(fù)和撤銷

防止外界對(duì)象破壞一個(gè)對(duì)象歷史狀態(tài)的封裝性,避免將對(duì)象歷史狀態(tài)的實(shí)現(xiàn)細(xì)節(jié)暴露給外界對(duì)象

源碼

在 JDK 中 java.util.Date 通過自身內(nèi)部的一個(gè) Long 值來實(shí)現(xiàn)備忘錄模式。

如下是源碼部分:

public class Date implements java.io.Serializable, Cloneable, Comparable<Date> {
    private transient long fastTime;
 
    public Date(long date) {
        fastTime = date;
    }
 
    public long getTime() {
        return getTimeImpl();
    }
 
    private final long getTimeImpl() {
        if (cdate != null && !cdate.isNormalized()) {
            normalize();
        }
        return fastTime;
    }
}

到此這篇關(guān)于Java設(shè)計(jì)模式初識(shí)之備忘錄模式詳解的文章就介紹到這了,更多相關(guān)Java備忘錄模式內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能

    java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能

    這篇文章主要為大家詳細(xì)介紹了java數(shù)據(jù)結(jié)構(gòu)實(shí)現(xiàn)雙向鏈表功能,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java設(shè)計(jì)模式之單件模式深入講解

    Java設(shè)計(jì)模式之單件模式深入講解

    有人說單件模式是最簡(jiǎn)單的模式,因?yàn)樗挥幸粋€(gè)類,但其實(shí)它還有一些值得注意的地方,就如:出現(xiàn)并發(fā)性時(shí),單件可能已經(jīng)不是單件了
    2021-11-11
  • 很多人竟然不知道Java線程池的創(chuàng)建方式有7種

    很多人竟然不知道Java線程池的創(chuàng)建方式有7種

    本文主要介紹了很多人竟然不知道Java線程池的創(chuàng)建方式有7種,文中通過示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-07-07
  • idea?Maven?插件?docker-maven-plugin?打包docker鏡像上傳到遠(yuǎn)程倉(cāng)庫(kù)的過程詳解

    idea?Maven?插件?docker-maven-plugin?打包docker鏡像上傳到遠(yuǎn)程倉(cāng)庫(kù)的過程詳解

    這篇文章主要介紹了idea Maven插件docker-maven-plugin打包docker鏡像上傳到遠(yuǎn)程倉(cāng)庫(kù),本文給大家介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或工作具有一定的參考借鑒價(jià)值,需要的朋友可以參考下
    2023-05-05
  • 詳解JUnit5參數(shù)化測(cè)試的幾種方式

    詳解JUnit5參數(shù)化測(cè)試的幾種方式

    參數(shù)化測(cè)試一直是津津樂道的話題,我們都知道JMeter有四種參數(shù)化方式:用戶自定義變量、用戶參數(shù)、CSV文件、函數(shù)助手,那么JUnit5有哪些參數(shù)化測(cè)試的方式呢
    2021-07-07
  • SpringBoot配置 Druid 三種方式(包括純配置文件配置)

    SpringBoot配置 Druid 三種方式(包括純配置文件配置)

    本文給大家分享在項(xiàng)目中用純 YML(application.yml 或者 application.properties)文件、Java 代碼配置 Bean 和注解三種方式配置 Alibaba Druid 用于監(jiān)控或者查看 SQL 狀況的相關(guān)知識(shí),感興趣的朋友一起看看吧
    2021-10-10
  • 利用Java讀取二進(jìn)制文件實(shí)例詳解

    利用Java讀取二進(jìn)制文件實(shí)例詳解

    這篇文章主要給大家介紹了利用Java讀取二進(jìn)制文件的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者使用java具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面跟著小編來一起學(xué)習(xí)學(xué)習(xí)吧。
    2017-08-08
  • Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換

    Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換

    這篇文章主要介紹了Java處理圖片實(shí)現(xiàn)base64編碼轉(zhuǎn)換,文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下
    2020-02-02
  • 使用JMeter進(jìn)行接口高并發(fā)測(cè)試的實(shí)現(xiàn)

    使用JMeter進(jìn)行接口高并發(fā)測(cè)試的實(shí)現(xiàn)

    本文主要介紹了使用JMeter進(jìn)行接口高并發(fā)測(cè)試的實(shí)現(xiàn),文中通過示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2022-04-04
  • 平衡二叉樹的左右旋以及雙旋轉(zhuǎn)的圖文詳解

    平衡二叉樹的左右旋以及雙旋轉(zhuǎn)的圖文詳解

    今天小編就為大家分享一篇關(guān)于平衡二叉樹的左右旋以及雙旋轉(zhuǎn)的圖文詳解,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧
    2019-01-01

最新評(píng)論