最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

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

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

簡介

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

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

典型實現(xiàn)

首先,定義一個備忘錄 Memento 類存儲狀態(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;
    }
}

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

public class Originator {
    private String state;
 
    public Originator() {}
 
    // 創(chuàng)建一個備忘錄對象
    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;
    }
}

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

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

總結(jié)

優(yōu)點

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

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

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

缺點

備忘錄模式的主要缺點如下:

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

適用場景

備忘錄模式的適用場景如下:

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

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

源碼

在 JDK 中 java.util.Date 通過自身內(nèi)部的一個 Long 值來實現(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è)計模式初識之備忘錄模式詳解的文章就介紹到這了,更多相關(guān)Java備忘錄模式內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • Java如何實現(xiàn)字符串每隔4位加空格

    Java如何實現(xiàn)字符串每隔4位加空格

    這篇文章主要介紹了Java如何實現(xiàn)字符串每隔4位加空格,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2022-06-06
  • Spring AOP + 注解實現(xiàn)統(tǒng)一注解功能

    Spring AOP + 注解實現(xiàn)統(tǒng)一注解功能

    本文我們通過Spring AOP和Java的自定義注解來實現(xiàn)日志的插入功能,非常不錯,具有一定的參考借鑒價值,需要的朋友一起看看吧
    2018-05-05
  • 解析Java定時任務(wù)的選型及改造問題

    解析Java定時任務(wù)的選型及改造問題

    這篇文章主要介紹了Java定時任務(wù)的選型及改造問題,本文給大家提到了Java主流三大定時任務(wù)框架優(yōu)缺點,通過實例代碼給大家介紹的非常詳細,需要的朋友可以參考下
    2022-02-02
  • SpringBoot熱部署Springloaded實現(xiàn)過程解析

    SpringBoot熱部署Springloaded實現(xiàn)過程解析

    這篇文章主要介紹了SpringBoot熱部署Springloaded實現(xiàn)過程解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • Spring框架的JdbcTemplate使用

    Spring框架的JdbcTemplate使用

    它是 Spring 框架中提供的一個對象,是對原始 Jdbc API 對象的簡單封裝。本文就來介紹一下Spring框架的JdbcTemplate使用,感興趣的可以了解一下
    2021-09-09
  • Java中HashMap和HashSet的高效使用技巧分享

    Java中HashMap和HashSet的高效使用技巧分享

    這篇文章主要為大家詳細介紹了Java中HashMap和HashSet的高效使用技巧,文中的示例代碼講解詳細,感興趣的小伙伴可以跟隨小編一起學(xué)習(xí)一下
    2024-03-03
  • springboot 場景啟動器使用解析

    springboot 場景啟動器使用解析

    這篇文章主要介紹了springboot 場景啟動器使用解析,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-02-02
  • 10中java常見字符串操作實例

    10中java常見字符串操作實例

    給大家分享10中java常見字符串操作方法以及相關(guān)實例代碼,對此有需要的讀者們可以學(xué)習(xí)參考下。
    2019-07-07
  • 基于Eclipce配置Spring Boot過程圖解

    基于Eclipce配置Spring Boot過程圖解

    這篇文章主要介紹了基于Eclipce配置Spring Boot過程圖解,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-03-03
  • 使用@JsonFormat的一個坑及解決

    使用@JsonFormat的一個坑及解決

    這篇文章主要介紹了使用@JsonFormat的一個坑及解決,具有很好的參考價值,希望對大家有所幫助。如有錯誤或未考慮完全的地方,望不吝賜教
    2021-11-11

最新評論

望城县| 罗山县| 手游| 木兰县| 温宿县| 石屏县| 铜陵市| 黄山市| 绥德县| 苏州市| 乡城县| 西安市| 孙吴县| 石河子市| 射洪县| 共和县| 敦化市| 句容市| 毕节市| 台南县| 霍州市| 涪陵区| 泸西县| 博罗县| 枣阳市| 商丘市| 将乐县| 永安市| 德清县| 都安| 刚察县| 南澳县| 大英县| 巨野县| 深泽县| 沾益县| 惠安县| 自治县| 岗巴县| 乐陵市| 古丈县|