激情久久久_欧美视频区_成人av免费_不卡视频一二三区_欧美精品在欧美一区二区少妇_欧美一区二区三区的

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語(yǔ)言|JavaScript|易語(yǔ)言|vb.net|

服務(wù)器之家 - 編程語(yǔ)言 - Java教程 - 怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)

怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)

2023-05-09 01:05未知服務(wù)器之家 Java教程

本篇內(nèi)容主要講解“怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)”

本篇內(nèi)容主要講解“怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)”,感興趣的朋友不妨來(lái)看看。本文介紹的方法操作簡(jiǎn)單快捷,實(shí)用性強(qiáng)。下面就讓小編來(lái)帶大家學(xué)習(xí)“怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)”吧!

介紹

備忘錄模式(Memento Pattern)是一種行為型設(shè)計(jì)模式,它允許在不破壞封裝性的前提下,捕獲并保存一個(gè)對(duì)象的內(nèi)部狀態(tài),并在之后可以恢復(fù)該對(duì)象到先前的狀態(tài).該模式的核心是備忘錄(Memento)類,它儲(chǔ)存了一個(gè)對(duì)象的內(nèi)部狀態(tài).

在Java中,備忘錄模式可以通過(guò)定義一個(gè)備忘錄類來(lái)實(shí)現(xiàn).備忘錄類通常包含一個(gè)或多個(gè)私有字段來(lái)儲(chǔ)存要保存的對(duì)象的內(nèi)部狀態(tài).備忘錄類還可以提供公共方法來(lái)獲取和設(shè)置這些字段.原始對(duì)象可以使用備忘錄類創(chuàng)建備忘錄,并將其保存到歷史記錄中.在需要恢復(fù)對(duì)象的狀態(tài)時(shí),原始對(duì)象可以從歷史記錄中獲取備忘錄,并使用備忘錄來(lái)恢復(fù)其狀態(tài).

在備忘錄模式中,一般會(huì)涉及到以下三個(gè)角色:

  • Originator(發(fā)起人):它是要被保存狀態(tài)的對(duì)象.它提供了創(chuàng)建備忘錄和恢復(fù)備忘錄的接口,允許其他對(duì)象獲取其內(nèi)部狀態(tài).

  • Memento(備忘錄):它用于儲(chǔ)存Originator內(nèi)部狀態(tài)得對(duì)象.備忘錄可以根據(jù)Originator得需求來(lái)保存其內(nèi)部狀態(tài),并且可以防止Originator以外得其他對(duì)象訪問(wèn)該狀態(tài).

  • Caretaker(管理者):它負(fù)責(zé)保存?zhèn)渫?并在需要時(shí)將其提供給Originator進(jìn)行恢復(fù),Caretaker可以儲(chǔ)存多個(gè)備忘錄,以及支持多次撤銷操作.

在Java中實(shí)現(xiàn)備忘錄模式時(shí),一般會(huì)涉及到以上三個(gè)角色.其中Originator和Memento是必需的,Caretaker可以根據(jù)實(shí)際需要來(lái)選擇是否實(shí)現(xiàn).

實(shí)現(xiàn)

假設(shè)有一個(gè)游戲角色類Role,它有三個(gè)屬性:attack(攻擊力),defense(防御力)和hp(生命值).現(xiàn)在我們要實(shí)現(xiàn)一個(gè)備忘錄模式,可以保存角色的狀態(tài),并在需要時(shí)恢復(fù)角色的狀態(tài).

備忘錄類

@Data
public?class?Memento?{
????/**
?????*?攻擊力
?????*/
????private?int?attack;
????/**
?????*?防御力
?????*/
????private?int?defense;
????/**
?????*?生命值
?????*/
????private?int?hp;
????public?Memento(int?attack,?int?defense,?int?hp)?{
????????this.attack?=?attack;
????????this.defense?=?defense;
????????this.hp?=?hp;
????}
}

發(fā)起人類

@Data
public?class?Role?{
????/**
?????*?攻擊力
?????*/
????private?int?attack;
????/**
?????*?防御力
?????*/
????private?int?defense;
????/**
?????*?生命值
?????*/
????private?int?hp;
????public?Role(int?attack,?int?defense,?int?hp)?{
????????this.attack?=?attack;
????????this.defense?=?defense;
????????this.hp?=?hp;
????}
????/**
?????*?將當(dāng)前對(duì)象儲(chǔ)存值Memento中
?????*?@return
?????*/
????public?Memento?save(){
????????return?new?Memento(attack,defense,hp);
????}
????/**
?????*?從memento中獲取狀態(tài);并恢復(fù)到當(dāng)前狀態(tài)
?????*?@param?memento
?????*/
????public?void?restore(Memento?memento){
????????attack?=?memento.getAttack();
????????defense?=?memento.getDefense();
????????hp?=?memento.getHp();
????}
}

管理者類

public?class?Caretaker?{
????private?List<Memento>?mementos?=?new?ArrayList<>();
????public?void?addMemento(Memento?m){
????????mementos.add(m);
????}
????public?Memento?getMemento(int?index){
????????return?mementos.get(index);
????}
}

測(cè)試

public?class?Demo?{
????public?static?void?main(String[]?args)?{
????????Role?role?=?new?Role(100,50,20);
????????Caretaker?caretaker?=?new?Caretaker();
????????Memento?memento?=?role.save();
????????caretaker.addMemento(memento);
????????//?攻擊力+10
????????role.setAttack(role.getAttack()+10);
????????System.out.println(JSON.toJSONString(role));
????????//?恢復(fù)
????????role.restore(caretaker.getMemento(0));
????????System.out.println(JSON.toJSONString(role));
????}
}

怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)

  • 可以實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù),使得對(duì)象狀態(tài)的變化更加靈活可控.

  • 模式實(shí)現(xiàn)簡(jiǎn)單,易于理解和使用.

  • 備忘錄對(duì)象和原始對(duì)象分離,保證了系統(tǒng)的封裝性.

  • 缺點(diǎn)

    • 如果要保存的狀態(tài)數(shù)據(jù)量比較大,備忘錄對(duì)象可能會(huì)占用較大的內(nèi)存空間.

    • 如果需要保存的狀態(tài)比較頻繁,備忘錄對(duì)象的管理可能會(huì)變得比較復(fù)雜.

    應(yīng)用場(chǎng)景

    • 需要保存對(duì)象狀態(tài)的歷史記錄,以便后續(xù)回退到之前的某個(gè)狀態(tài),例如文本編輯器中的撤銷操作.

    • 需要對(duì)對(duì)象狀態(tài)進(jìn)行備份和恢復(fù)的場(chǎng)景,例如數(shù)據(jù)庫(kù)中的事務(wù)管理.

    • 需要實(shí)現(xiàn)對(duì)象狀態(tài)的快照,一邊后續(xù)進(jìn)行分析和統(tǒng)計(jì),例如游戲中存檔和回放功能.

    總之Java備忘錄模式適用于需要保存和恢復(fù)對(duì)象狀態(tài)的場(chǎng)景,可以幫助開(kāi)發(fā)者更好地管理對(duì)象狀態(tài)的變化,提高系統(tǒng)的靈活性和可控性.

    到此,相信大家對(duì)“怎么使用Java備忘錄模式實(shí)現(xiàn)對(duì)象狀態(tài)的保存和恢復(fù)”有了更深的了解,不妨來(lái)實(shí)際操作一番吧!這里是***網(wǎng)站,更多相關(guān)內(nèi)容可以進(jìn)入相關(guān)頻道進(jìn)行查詢,關(guān)注我們,繼續(xù)學(xué)習(xí)!

    延伸 · 閱讀

    精彩推薦
    • Java教程IntelliJ IDEA 2017 漢化包及圖文教程

      IntelliJ IDEA 2017 漢化包及圖文教程

      這篇文章主要介紹了IntelliJ IDEA 2017 漢化包及圖文教程,文中給大家提供兩種方法,非常不錯(cuò),具有參考借鑒價(jià)值,需要的朋友參考下吧...

      另一種可喜風(fēng)流14062021-04-10
    • Java教程Java求s=a+aa+aaa+aaaa+aa...a 5個(gè)數(shù)相加的值

      Java求s=a+aa+aaa+aaaa+aa...a 5個(gè)數(shù)相加的值

      求s=a+aa+aaa+aaaa+aa...a的值,其中a是一個(gè)數(shù)字。例如2+22+222+2222+22222(此時(shí)共有5個(gè)數(shù)相加),幾個(gè)數(shù)相加有鍵盤控制...

      Java教程網(wǎng)6122020-08-17
    • Java教程Selenium Webdriver實(shí)現(xiàn)截圖功能的示例

      Selenium Webdriver實(shí)現(xiàn)截圖功能的示例

      今天小編就為大家分享一篇Selenium Webdriver實(shí)現(xiàn)截圖功能的示例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧...

      Monkey大圣9322021-05-03
    • Java教程Java Quartz觸發(fā)器CronTriggerBean配置用法詳解

      Java Quartz觸發(fā)器CronTriggerBean配置用法詳解

      這篇文章主要介紹了Java Quartz觸發(fā)器CronTriggerBean配置用法詳解,本篇文章通過(guò)簡(jiǎn)要的案例,講解了該項(xiàng)技術(shù)的了解與使用,以下就是詳細(xì)內(nèi)容,需要的朋友可以參...

      clypm8932021-11-16
    • Java教程淺談web項(xiàng)目讀取classpath路徑下面的文件

      淺談web項(xiàng)目讀取classpath路徑下面的文件

      這篇文章主要介紹了淺談web項(xiàng)目讀取classpath路徑下面的文件,具有一定借鑒價(jià)值,需要的朋友可以參考下...

      Mr_伍先生9192021-03-18
    • Java教程Hibernate實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖代碼介紹

      Hibernate實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖代碼介紹

      這篇文章主要介紹了Hibernate實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖的有關(guān)內(nèi)容,涉及hibernate的隔離機(jī)制,以及實(shí)現(xiàn)悲觀鎖和樂(lè)觀鎖的代碼實(shí)現(xiàn),需要的朋友可以了解下。...

      光仔December9412021-01-11
    • Java教程MyBatis執(zhí)行動(dòng)態(tài)SQL的方法

      MyBatis執(zhí)行動(dòng)態(tài)SQL的方法

      今天小編就為大家分享一篇關(guān)于MyBatis執(zhí)行動(dòng)態(tài)SQL的方法,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看...

      isea53311532021-06-25
    • Java教程Java抽象類的概念講解

      Java抽象類的概念講解

      今天小編就為大家分享一篇關(guān)于Java抽象類的概念講解,小編覺(jué)得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來(lái)看看吧...

      mumu19989042021-07-14
    主站蜘蛛池模板: 男人的天堂毛片 | 亚洲欧美日韩精品久久亚洲区 | 狼人狠狠干 | 久久99精品久久久久久国产越南 | 欧美精品激情在线 | av成人免费观看 | 全免费午夜一级毛片真人 | 一区二区三区小视频 | 成人男男视频拍拍拍在线观看 | 亚洲网在线 | 黑人一级片 | av免费在线不卡 | 久久久噜噜噜久久熟有声小说 | av成人一区二区 | 久久精品首页 | hd性videos意大利复古 | 国产成人精品一区二区视频免费 | 91精品国产免费久久 | 99精品视频在线免费观看 | 久久精品一区二区三区国产主播 | 美国一级黄色毛片 | 欧美精品一区自拍a毛片在线视频 | 日本黄色大片免费 | 国产91在线高潮白浆在线观看 | 亚洲性视频 | 精国品产一区二区三区有限公司 | 久久精品电影网 | 成年人精品视频 | 曰韩在线视频 | 久久99精品久久久久久园产越南 | 欧美黄成人免费网站大全 | 91在线色| 成人免费观看49www在线观看 | 得得啪在线 | 日本在线一区二区 | 三级国产网站 | 黄色小视频免费在线观看 | 精品国产91久久久久久浪潮蜜月 | 一区二区久久久久草草 | 91精品国产91久久久久久丝袜 | 亚洲一级成人 |