日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区

您的位置:首頁技術文章
文章詳情頁

實例講解JAVA設計模式之備忘錄模式

瀏覽:18日期:2022-08-30 13:24:53

在講述這個模式之前,我們先看一個案例:游戲回檔

游戲的某個場景,一游戲角色有生命力、攻擊力、防御力等數據,在打Boss前和后會不一樣,我們允許玩家如果感覺與Boss決斗的效果不理想,可以讓游戲恢復到決斗前。下面是代碼:

游戲角色類,用來存儲角色的生命力、攻擊力、防御力的數據。

public class GameRole { private int vit;//生命力 private int atk;//攻擊力 private int def;//防御力 //狀態顯示 public void stateDisplay() { System.out.println('當前角色狀態:'); System.out.println('體力:'+this.vit); System.out.println('攻擊力'+this.atk); System.out.println('防御力'+this.def); } //獲取初始狀態 public void getInitState() { //數據通常來自本地磁盤或遠程數據庫 this.vit = 100; this.atk = 100; this.def = 100; } //戰斗 public void fight() { //在與Boss大戰后游戲數據損耗為0 this.vit = 0; this.atk = 0; this.def = 0; } //省略getter、setter方法 }//測試方法public class Test { public static void main(String[] args) { //大戰Boss前 GameRole lixiaoyao = new GameRole(); lixiaoyao.getInitState();//Boss大戰前,獲得角色初始狀態 lixiaoyao.stateDisplay(); //保存進度,通過游戲角色的新實例來保存進度 GameRole backup = new GameRole(); backup.setVit(lixiaoyao.getVit()); backup.setAtk(lixiaoyao.getAtk()); backup.setDef(lixiaoyao.getDef()); //大戰Boss時,損耗嚴重,所有數據全部損耗為0 lixiaoyao.fight(); lixiaoyao.stateDisplay(); //恢復之前狀態,重新來玩 lixiaoyao.setVit(backup.getVit()); lixiaoyao.setAtk(backup.getAtk()); lixiaoyao.setDef(backup.getDef()); lixiaoyao.stateDisplay(); }}

上面的代碼實現了效果,但是不理想的是:main方法里暴露了太多“細節”,使得main方法需要知道“生命力、攻擊力、防御力”這樣的細節。以后需要增加“魔法值”或修改現有的“生命力”為“經驗值”,這部分就要修改了。同樣的道理也存在于恢復時的代碼。顯然,我們希望的是把這些“游戲角色”的存取狀態細節封裝起來,而且最好是封裝在外部的類中。以體現職責分離。

下面介紹備忘錄模式:https://www.jb51.net/article/189469.htm

在不破壞封裝性的前提下,捕獲一個對象的內部狀態,并在該對象之外保存這個狀態,這樣以后就可將該對象恢復到原先保存的狀態。

用備忘錄模式優化案例

public class GameRole { private int vit;//生命力 private int atk;//攻擊力 private int def;//防御力 //狀態顯示 public void stateDisplay() { System.out.println('當前角色狀態:'); System.out.println('體力:'+this.vit); System.out.println('攻擊力'+this.atk); System.out.println('防御力'+this.def); } //獲取初始狀態 public void getInitState() { //數據通常來自本地磁盤或遠程數據庫 this.vit = 100; this.atk = 100; this.def = 100; } //戰斗 public void fight() { //在與Boss大戰后游戲數據損耗為0 this.vit = 0; this.atk = 0; this.def = 0; } //新增“保存角色狀態”方法,將游戲角色的三個狀態值通過實例化“角色狀態存儲箱”返回 public RoleStateMemento saveState() { return new RoleStateMemento(vit, atk, def); } //新增“恢復角色狀態”方法,可將外部的“角色狀態存儲箱”中的狀態值恢復給游戲角色 public void recoveryState(RoleStateMemento memento) { this.vit = memento.getAtk(); this.atk = memento.getAtk(); this.def = memento.getDef(); } //省略getter、setter方法 }//角色狀態存儲箱類public class RoleStateMemento { private int vit;//生命力 private int atk;//攻擊力 private int def;//防御力 //將生命力、攻擊力、防御力存入狀態存儲箱對象中 public RoleStateMemento(int vit, int atk, int def) { super(); this.vit = vit; this.atk = atk; this.def = def; } //省略getter、setter方法 }//角色狀態管理者類public class RoleStateCaretaker { private RoleStateMemento memento; public RoleStateMemento getMemento() { return memento; } public void setMemento(RoleStateMemento memento) { this.memento = memento; } }//測試方法public class Test { public static void main(String[] args) { //大戰Boss前 GameRole lixiaoyao = new GameRole(); lixiaoyao.getInitState();//Boss大戰前,獲得角色初始狀態 lixiaoyao.stateDisplay(); //保存進度,由于封裝在Memento中,因此我們并不知道保存了哪些具體的數據 RoleStateCaretaker stateAdmin = new RoleStateCaretaker(); stateAdmin.setMemento(lixiaoyao.saveState()); //大戰Boss時,損耗嚴重 lixiaoyao.fight(); lixiaoyao.stateDisplay(); //恢復之前的狀態 lixiaoyao.recoveryState(stateAdmin.getMemento()); lixiaoyao.stateDisplay(); }}

輸出結果同上。

肯定有人會問:對于“角色狀態”的保存,直接調用RoleStateMemento進行set和get不就行了,為什么還需要一個RoleStateCaretaker類呢?

這是為了符合迪米特法則進行的優化!

備忘錄模式也是有缺點的,角色狀態需要完整存儲到備忘錄對象中,如果狀態數據很大很多,那么在資源消耗上,備忘錄對象會非常耗內存。所以也不是用的越多越好。

以上就是實例講解JAVA設計模式之備忘錄模式的詳細內容,更多關于JAVA 備忘錄模式的資料請關注好吧啦網其它相關文章!

標簽: Java
相關文章:
日本不卡不码高清免费观看,久久国产精品久久w女人spa,黄色aa久久,三上悠亚国产精品一区二区三区
国产精品一区2区3区| 精品美女视频| 国产一区国产二区国产三区| 国产欧美另类| 亚洲精品自拍| 欧美韩日一区| 久久国产生活片100| 亚洲最大av| 日本综合精品一区| 欧美在线看片| 国产精品115| 久久香蕉网站| 久久人人97超碰国产公开结果| 久久久一二三| 亚洲免费网址| 久久国产麻豆精品| 粉嫩av一区二区三区四区五区| 男人的天堂久久精品| 日本精品另类| 国产毛片精品| 成人免费一区| 国产一区二区三区自拍| 一区二区91| 成人日韩在线| 日产欧产美韩系列久久99| 欧美日韩免费看片| 亚洲精品成人一区| 亚洲一级少妇| 国产午夜久久av| 欧美天堂亚洲电影院在线观看| 国产欧美日韩在线观看视频| 久久精品亚洲欧美日韩精品中文字幕| 日本亚洲不卡| 久久精品在线| 久久精品99久久久| 999国产精品| 免费日韩成人| 亚洲精品日本| 亚洲国产综合在线看不卡| 国产麻豆一区| 午夜在线视频观看日韩17c| 国产一区一一区高清不卡| 中文字幕成人| 久久精品国产www456c0m| 国产精品亚洲欧美日韩一区在线 | 精品国产黄a∨片高清在线| 一区二区亚洲精品| 精品99久久| 亚洲综合中文| 欧美日一区二区| 国产精品久久久久久妇女| 日韩午夜av在线| 另类专区亚洲| 久久国产欧美日韩精品| 国产精品丝袜xxxxxxx| 国产精品麻豆久久| 日韩精品视频一区二区三区| 美女少妇全过程你懂的久久| 给我免费播放日韩视频| 国产欧美日韩一级| 亚洲一级大片| 日韩一区二区久久| 激情综合自拍| 理论片午夜视频在线观看| 国产欧美日韩精品高清二区综合区| 免费人成在线不卡| 国产综合亚洲精品一区二| 97精品中文字幕| 国产精品色在线网站| 亚洲精品视频一二三区| 午夜欧美视频| 亚洲www啪成人一区二区| 国产精品免费99久久久| 日韩一区二区三免费高清在线观看 | 日韩精品福利一区二区三区| 欧美.日韩.国产.一区.二区| 欧美三级精品| 国产日韩电影| 电影91久久久| 久久中文欧美| 久久不卡国产精品一区二区| 国产亚洲第一伦理第一区| 日本中文字幕一区二区视频 | 成人欧美一区二区三区的电影| 国语精品一区| 欧美xxxx中国| 久久中文字幕一区二区| 欧美成人aaa| 风间由美中文字幕在线看视频国产欧美| 国产精品1区在线| 麻豆精品在线| 成人日韩av| 香蕉成人av| 久久人人精品| 午夜欧美视频| 亚洲一区二区小说| 亚洲精品第一| 国产欧美日韩一区二区三区四区| 国产美女亚洲精品7777| 国产伦理一区| 成人免费一区| 国产h片在线观看| 伊人久久高清| 欧美日韩四区| 亚洲一区二区动漫| 亚洲乱码一区| 欧美日韩亚洲一区三区| 国产精品亲子伦av一区二区三区 | 久久av影视| 国产成人精品三级高清久久91| 欧美激情另类| 久久人人99| 亚洲免费黄色| 丝袜亚洲精品中文字幕一区| 亚洲精一区二区三区| 91成人在线网站| 久久精品国产久精国产| 日韩精品第一区| 亚洲精品123区| 日本不卡一区二区三区| 欧美交a欧美精品喷水| 国产成人免费精品| 影视先锋久久| 日韩在线视频一区二区三区| 国产三级一区| 在线观看精品| 亚洲一区二区三区免费在线观看 | 国产精品最新自拍| 精品久久久网| 性欧美69xoxoxoxo| 亚洲狼人精品一区二区三区| 国产日韩精品视频一区二区三区| 精品国产欧美日韩| 性欧美69xoxoxoxo| 青草av.久久免费一区| 国产一区二区三区四区五区| 国产精品99一区二区| 日韩精品免费视频人成 | 欧美日韩网址| 色黄视频在线观看| 久久福利一区| 久久麻豆视频| 狠狠久久婷婷| 欧美精品不卡| 在线国产一区| 国产精品巨作av| 99久久久久国产精品| 综合亚洲视频| 成人欧美一区二区三区的电影| 99在线精品视频在线观看| 91九色综合| 免费福利视频一区二区三区| 午夜宅男久久久| 精品中文字幕一区二区三区四区| 亚洲激情社区| 久久久精品国产**网站| 婷婷六月综合| 老司机精品视频网| 国产精品美女久久久| 国产精品网址| 男女精品网站| 国产aa精品| 日韩三级一区| 蜜臀91精品国产高清在线观看| 国产精品白丝一区二区三区| 午夜欧美精品| 欧美黄色一区| 天堂成人国产精品一区| 国产成人久久精品麻豆二区 | 欧美成a人国产精品高清乱码在线观看片在线观看久 | 久久国内精品| 亚洲精品极品少妇16p| 欧美成人精品一级| 免费人成黄页网站在线一区二区| 91日韩免费| 欧美日韩精品一区二区三区在线观看| 亚洲福利一区| 精品国产黄a∨片高清在线| 日韩在线视频一区二区三区| 亚洲va中文在线播放免费| 国产日韩一区二区三免费高清| 一区视频在线| 日韩一区自拍| 国产精品sm| 亚洲日产国产精品| 欧美高清不卡| 国产 日韩 欧美 综合 一区| 欧美日韩一区二区三区不卡视频| 在线日韩视频| 中文在线а√天堂| 国产美女久久| 亚洲久久在线| 日韩午夜高潮| 欧美片第1页| 欧美激情网址| 7777精品| 日韩一区精品| 亚洲资源网站| 亚洲综合精品| 99精品视频在线|