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

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

 更新時間:2023年12月18日 09:51:11   作者:暴躁的程序猿啊  
這篇文章主要介紹了Java設(shè)計模式之備忘錄模式詳解,備忘錄模式在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài)并在該對象之外保存這個狀態(tài),這樣以后就可以將該對象恢復(fù)到原先保存的狀態(tài),需要的朋友可以參考下

Java備忘錄模式

游戲角色狀態(tài)恢復(fù)問題

游戲角色有攻擊力和防御力,在大戰(zhàn)boss之前保存自身的狀態(tài)(攻擊力血量等等),當(dāng)大戰(zhàn)boss后攻擊力和防御力下降,從備忘錄對象恢復(fù)到大戰(zhàn)前的狀態(tài)

傳統(tǒng)的方式問題分析

1.一個對象,就對應(yīng)一個保存對象狀態(tài)的對象,這樣當(dāng)我們游戲的對象很多時,不利于管理,開銷也很大

2.傳統(tǒng)的方式是簡單的備份,new出另外一個對象出來,再把需要備份的數(shù)據(jù)放到這個新對象,但這樣就暴露了對象的內(nèi)部細節(jié)

解決方案 : 備忘錄模式

模式基本介紹:

1.備忘錄模式(Memento Pattern)在不破壞封裝性的前提下,捕獲一個對象的內(nèi)部狀態(tài)并在該對象之外保存這個狀態(tài),這樣以后就可以將該對象恢復(fù)到原先保存的狀態(tài)

2.可以這里理解備忘錄模式顯示生活中的備忘錄模式是用來記錄某些要去做的事情或者是記錄已經(jīng)打成的共同意見的事情,以防忘記了。而在軟件層面,備忘錄模式有著相同的含義,備忘錄對象主要用來獲取一個對象的某種狀態(tài),或者某些數(shù)據(jù),當(dāng)要做回退時,可以從備忘錄對象里獲取原來的數(shù)據(jù)進行恢復(fù)操作

3.備忘錄模式屬于行為型模式

備忘錄模式類圖對象說明

1.originator:對象(需要保存狀態(tài)的對象)

2.Memento:備忘錄對象,負責(zé)保存好記錄即Originator的內(nèi)部狀態(tài)

3.Caretaker:守護者對象,負責(zé)保存多個備忘錄對象,使用集合管理,提高效率

4.如果希望保存多個Originator對象的不同時間的狀態(tài)也可以,只需要HashMap<String,集合>

游戲角色恢復(fù)狀態(tài)實例

備忘錄對象

/**
 * @create: 2021/10/16
 * @author: Tony Stark
 */
public class Memento {
    private  String  state;
    public Memento(String state) {
        this.state=state;
    }
    public String getState() {
        return state;
    }
}

源對象

/**
 * @create: 2021/10/16
 * @author: Tony Stark
 */
public class Originator {
    private String state;
    public Memento saveState(){
        return new Memento(state);
    }
    public void getStateMemento(Memento memento){
         state=memento.getState();
    }
    public String getState() {
        return state;
    }
    public void setState(String state) {
        this.state = state;
    }
}

管理備忘錄對象的類

符合迪米特法則

/**
 * @create: 2021/10/16
 * @author: Tony Stark
 */
public class Caretaker {
    private List<Memento> mementoList=new ArrayList<>();
    public  void add(Memento memento){
         mementoList.add(memento);
    }
    public  Memento getIndex(int index){
     return  mementoList.get(index);
    }
}

調(diào)用測試

/**
 * @create: 2021/10/16
 * @author: Tony Stark
 */
public class Client {
    public static void main(String[] args) {
        Originator originator = new Originator();
        Caretaker caretaker = new Caretaker();
        originator.setState("血量100%");
        System.out.println(originator.getState());
        System.out.println("保存當(dāng)前血量");
        caretaker.add(originator.saveState());
        System.out.println("團戰(zhàn)中------->團戰(zhàn)結(jié)束");
        originator.setState("血量50%");
        System.out.println("剩余血量為------->"+originator.getState());
        originator.getStateMemento(caretaker.getIndex(0));
        System.out.println("回基地補充血量---->血量恢復(fù)為---"+originator.getState());
    }
}

輸出

血量100%
保存當(dāng)前血量
團戰(zhàn)中------->團戰(zhàn)結(jié)束
剩余血量為------->血量50%
回基地補充血量---->血量恢復(fù)為---血量100%

備忘錄模式的注意事項和細節(jié)

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

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

3.如果類的成員變量過多,勢必會占用比較大的資源,而且每一次保存都會消耗一定的內(nèi)存,這個需要注意

4.適用的應(yīng)用場景1.后悔藥 2.游戲的存檔3.Windows里的Ctri+z撤銷 4.IE中的后退5.數(shù)據(jù)庫的事務(wù)管理

5.為了節(jié)約內(nèi)存,備忘錄模式可以和原型模式配合使用

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

相關(guān)文章

  • Spring Boot ActiveMQ如何設(shè)置訪問密碼

    Spring Boot ActiveMQ如何設(shè)置訪問密碼

    這篇文章主要介紹了Spring Boot ActiveMQ如何設(shè)置訪問密碼,文中通過示例代碼介紹的非常詳細,對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友可以參考下
    2020-07-07
  • Java無限級樹(遞歸)超實用案例

    Java無限級樹(遞歸)超實用案例

    下面小編就為大家?guī)硪黄狫ava無限級樹(遞歸)超實用案例。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2016-11-11
  • 解決springboot中mongodb不啟動及Dao不能被掃描到的問題

    解決springboot中mongodb不啟動及Dao不能被掃描到的問題

    這篇文章主要介紹了解決springboot中mongodb不啟動及Dao不能被掃描到的問題,具有很好的參考價值,希望對大家有所幫助,如有錯誤或未考慮完全的地方,望不吝賜教
    2024-05-05
  • java中List集合去重常見的幾種方法總結(jié)

    java中List集合去重常見的幾種方法總結(jié)

    在Java編程中List集合是一種常用的數(shù)據(jù)結(jié)構(gòu),它允許我們存儲和操作一組有序的對象,這篇文章主要給大家介紹了關(guān)于java中List集合去重常見的幾種方法,文中通過代碼介紹的非常詳細,需要的朋友可以參考下
    2025-07-07
  • 利用maven引入第三方j(luò)ar包以及打包

    利用maven引入第三方j(luò)ar包以及打包

    Maven是通過倉庫對依賴進行管理的,當(dāng)Maven項目需要某個依賴時,只要其POM中聲明了依賴的坐標(biāo)信息,Maven就會自動從倉庫中去下載該構(gòu)件使用,如何將jar引用到項目,并且能夠讓項目正常調(diào)用該jar包的方法,本篇文章重點針對于這兩點進行講解
    2023-05-05
  • SpringBoot 下的 Static 文件夾打包成前端資源的示例代碼

    SpringBoot 下的 Static 文件夾打包成前端資源的示例代碼

    這篇文章主要介紹了SpringBoot 下的 Static 文件夾如何打包成前端資源,本文通過實例代碼給大家介紹的非常詳細,對大家的學(xué)習(xí)或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-06-06
  • SpringBoot中的HATEOAS詳情

    SpringBoot中的HATEOAS詳情

    這篇文章主要介紹了SpringBoot中的HATEOAS詳情,SpringBoot提供了HATEOAS的便捷使用方式,文章圍繞主題展開詳細介紹內(nèi)容,需要的小伙伴可以參考一下
    2022-05-05
  • java自定義驗證器的實現(xiàn)示例

    java自定義驗證器的實現(xiàn)示例

    在對外暴露接口中,我們通常會對入?yún)⑦M行驗證,比如一些字符串非空判斷等,本文主要介紹了java自定義驗證器的實現(xiàn)示例,具有一定的參考價值,感興趣的可以了解一下
    2024-01-01
  • Java?EasyExcel創(chuàng)建復(fù)雜表格的完整指南

    Java?EasyExcel創(chuàng)建復(fù)雜表格的完整指南

    WriteTable?是?EasyExcel?庫中的一個核心組件,用于在同一個?Excel?表單(Sheet)內(nèi)創(chuàng)建多個獨立的表格區(qū)域,下面我們來看看如何使用WriteTable創(chuàng)建復(fù)雜表格吧
    2025-12-12
  • Java面試題篇之Sleep()方法與Wait()方法的區(qū)別詳解

    Java面試題篇之Sleep()方法與Wait()方法的區(qū)別詳解

    這篇文章主要給大家介紹了關(guān)于Java面試題篇之Sleep()方法與Wait()方法區(qū)別的相關(guān)資料,wait()是Object類中的方法,而sleep()是Thread類中的靜態(tài)方法,wait()方法用于多個線程之間的協(xié)作和通信,而sleep()方法用于線程的休眠,需要的朋友可以參考下
    2024-07-07

最新評論

汉阴县| 团风县| 增城市| 丰县| 专栏| 天峨县| 怀安县| 大城县| 偃师市| 四平市| 淳安县| 五指山市| 上杭县| 酒泉市| 沈阳市| 敦化市| 敦煌市| 绥化市| 永和县| 保康县| 福贡县| 灯塔市| 黑山县| 定安县| 吉林市| 句容市| 卢氏县| 弥渡县| 黔东| 尉氏县| 丘北县| 昌都县| 溧阳市| 广宁县| 隆德县| 绍兴市| 汝城县| 福建省| 洱源县| 尖扎县| 遵义县|