成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久

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

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

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

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

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

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

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

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

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

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

用備忘錄模式優(yōu)化案例

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

輸出結果同上。

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

這是為了符合迪米特法則進行的優(yōu)化!

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

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

標簽: Java
相關文章:
成人在线亚洲_国产日韩视频一区二区三区_久久久国产精品_99国内精品久久久久久久
欧美视频一二三区| 久久精品欧美日韩精品| 国产拍欧美日韩视频二区| 国产福利精品一区二区| 欧美最猛性xxxxx直播| 亚洲成人激情av| 国产精品五区| 国产精品国产自产拍高清av王其| 女主播福利一区| 久久久99久久| 91美女片黄在线观看91美女| 久久这里只有精品6| 成人福利视频在线| 日韩欧美一区二区免费| 国产白丝网站精品污在线入口| 欧美日韩国产一二三| 美日韩一级片在线观看| 91久久精品一区二区二区| 免费成人在线视频观看| 在线视频国产一区| 麻豆精品新av中文字幕| 欧美中文一区二区三区| 天堂一区二区在线| 色婷婷综合五月| 麻豆成人免费电影| 欧美精品vⅰdeose4hd| 国产精品主播直播| 精品国产99国产精品| 国产盗摄女厕一区二区三区| 日韩一区二区精品| 99综合影院在线| 国产午夜久久久久| 国产精品s色| 日韩久久一区二区| 国产精品久久久久久久久久直播| 亚洲精品大片www| 国产九九精品| 午夜不卡av免费| 欧美日韩一区国产| 国产福利91精品一区二区三区| 日韩欧美在线影院| 91免费观看国产| 中国av一区二区三区| 99精品国产高清一区二区 | 一区二区三区高清不卡| 久久久久一区| 久草精品在线观看| 精品国产一区二区精华| 欧美另类专区| 亚洲天堂网中文字| 久久精品国产第一区二区三区最新章节 | 性欧美暴力猛交另类hd| 日韩精品色哟哟| 在线不卡免费欧美| 99精品热视频| 亚洲码国产岛国毛片在线| 快she精品国产999| 国产在线乱码一区二区三区| 欧美一区二区三区视频在线观看| 91在线视频18| 亚洲精品欧美综合四区| 色吧成人激情小说| 成人精品免费看| 亚洲精品免费视频| 欧美日本一道本在线视频| 91在线国产福利| 亚洲国产精品麻豆| 亚洲在线免费播放| 欧美亚洲动漫制服丝袜| 风流少妇一区二区| 中文字幕一区二区不卡| 六月天综合网| 成人美女视频在线看| 欧美国产禁国产网站cc| 老鸭窝毛片一区二区三区| 国产高清不卡二三区| 国产精品伦理一区二区| 久久精品日产第一区二区| 国产成人av电影在线| 国产精品福利一区| 在线观看视频91| 亚洲欧美一级二级三级| 日韩国产欧美在线观看| 久久综合九色综合97婷婷女人 | 伊人久久成人| 精品污污网站免费看| 国产精品系列在线观看| 亚洲欧美一区二区视频| 欧美专区在线观看一区| 成人国产精品免费观看视频| 91精品国产91久久久久久最新毛片| 国产精品18久久久| 久久这里只精品最新地址| 亚洲免费网站| 风间由美一区二区三区在线观看| 亚洲美女在线国产| 日韩一级大片在线| 在线亚洲伦理| 国产成人精品免费一区二区| 亚洲视频一区二区在线| 5566中文字幕一区二区电影| 黄色欧美日韩| 精品在线免费视频| 中文字幕一区二区日韩精品绯色| 欧美日韩中文字幕精品| 亚洲高清成人| 国产99久久久国产精品潘金| 亚洲国产欧美在线| 国产亚洲污的网站| 欧美日韩一区二区三区在线| 亚洲国产精品一区二区第四页av| 国产老妇另类xxxxx| 91精品欧美久久久久久动漫| 日韩视频不卡| 97精品久久久午夜一区二区三区| 免费久久精品视频| 最新热久久免费视频| 91精品国产入口| 久久国产精品毛片| 好看的av在线不卡观看| 国产成人免费视| 日韩激情视频在线观看| 1024国产精品| 久久综合五月天婷婷伊人| 在线观看日韩国产| 国产视频精品网| 欧美 日韩 国产 一区| 国产精品中文字幕一区二区三区| 亚洲乱码国产乱码精品精小说| 欧美mv日韩mv国产网站| 日本韩国一区二区三区| 狠狠色噜噜狠狠色综合久| 国产成人在线观看| 日韩精品欧美精品| 亚洲欧洲美洲综合色网| 亚洲精品在线三区| 欧美在线观看禁18| 国产精品外国| 影音先锋久久久| 97aⅴ精品视频一二三区| 激情综合色丁香一区二区| 亚洲一区二区三区小说| 国产精品毛片无遮挡高清| 日韩精品一区二区三区视频播放 | 在线免费视频一区二区| 国产精品久久久久久久久婷婷| 欧美日韩成人| 99久久免费精品高清特色大片| 国产在线一区观看| 久久97超碰国产精品超碰| 日韩高清在线观看| 亚洲福利一二三区| 亚洲天堂免费看| 国产精品国模大尺度视频| www激情久久| 欧美变态口味重另类| 制服视频三区第一页精品| 欧美日韩中文国产| 欧美视频一区二区在线观看| 欧日韩精品视频| 欧美午夜影院一区| 欧洲av一区二区嗯嗯嗯啊| 欧美亚洲国产一区在线观看网站| 色视频成人在线观看免| 色伊人久久综合中文字幕| 毛片一区二区| 久久中文欧美| 色综合久久久网| 鲁鲁狠狠狠7777一区二区| 国产美女一区| 亚洲一区二区三区高清| 亚洲韩日在线| 亚洲无线观看| 亚洲国产婷婷香蕉久久久久久99| 欧美日韩免费高清| 国产一区视频观看| 黑丝一区二区三区| 雨宫琴音一区二区在线| 亚洲成人在线视频网站| 亚洲三级视频| 国产伦精品一区二区| 久久人人精品| 欧美在线你懂得| 这里只有精品免费| 日韩欧美在线影院| 久久久夜色精品亚洲| 久久精子c满五个校花| 国产欧美久久久精品影院| 中文字幕不卡的av| 亚洲色图20p| 亚洲国产精品视频| 另类小说一区二区三区| 国产精品中文字幕欧美| av一区二区三区在线| 国产精品yjizz| 国产精品日韩欧美一区二区三区 | 欧美日韩精品系列| 3atv在线一区二区三区| 日韩欧美在线1卡| 国产亚洲欧美激情|