1 package com.shejimoshi.behavioral.Memento; 2 3 4 /** 5 * 功能:游戲角色 6 * 時間:2016年3月6日下午9:39:18 7 * 作者:cutter_point 8 */ 9 public class GameRole 10 { 11
1 package com.shejimoshi.behavioral.Memento; 2 3 4 /** 5 * 功能:游戲角色 6 * 時間:2016年3月6日下午9:39:18 7 * 作者:cutter_point 8 */ 9 public class GameRole 10 { 11 private int attackPower; //攻擊力 12 private int blood; //血量 13 private int defense; //防禦力 14 15 public void getInitState() 16 { 17 attackPower = 100; 18 blood = 100; 19 defense = 100; 20 } 21 22 public void display() 23 { 24 System.out.println("攻擊力:" + attackPower + "\t生命力:" + blood + "\t防禦力:" + defense); 25 } 26 27 //保存當前存儲點 28 public Memento saveState() 29 { 30 return new Memento(attackPower, blood, defense); 31 } 32 33 public void recoveryState(Memento memento) 34 { 35 this.attackPower = memento.getAttackPower(); 36 this.blood = memento.getBlood(); 37 this.defense = memento.getDefense(); 38 } 39 40 public void fight() 41 { 42 this.attackPower -= 40; 43 this.blood -= 40; 44 this.defense -= 60; 45 } 46 }
1 package com.shejimoshi.behavioral.Memento; 2 3 4 /** 5 * 功能:存儲狀態管理者 6 * 時間:2016年3月6日下午10:10:23 7 * 作者:cutter_point 8 */ 9 public class RoleStateCaretaker 10 { 11 private Memento memento; 12 13 public Memento getMemento() 14 { 15 return memento; 16 } 17 18 public void setMemento(Memento memento) 19 { 20 this.memento = memento; 21 } 22 23 }
1 package com.shejimoshi.behavioral.Memento; 2 3 4 /** 5 * 功能:游戲存儲點,備忘錄 6 * 時間:2016年3月6日下午9:46:03 7 * 作者:cutter_point 8 */ 9 public class Memento 10 { 11 private int attackPower; //攻擊力 12 private int blood; //血量 13 private int defense; //防禦力 14 15 public Memento(int attackPower, int blood, int defense) 16 { 17 this.attackPower = attackPower; 18 this.blood = blood; 19 this.defense = defense; 20 } 21 22 public int getAttackPower() 23 { 24 return attackPower; 25 } 26 27 public void setAttackPower(int attackPower) 28 { 29 this.attackPower = attackPower; 30 } 31 32 public int getBlood() 33 { 34 return blood; 35 } 36 37 public void setBlood(int blood) 38 { 39 this.blood = blood; 40 } 41 42 public int getDefense() 43 { 44 return defense; 45 } 46 47 public void setDefense(int defense) 48 { 49 this.defense = defense; 50 } 51 52 }
1 package com.shejimoshi.behavioral.Memento; 2 3 4 /** 5 * 功能:在不破壞封裝性的前提下,捕獲一個對象的內部狀態,併在該對象之外保存這個狀態。這樣以後就可將該對象恢復到原先的狀態 6 * 適用:必須保存一個對象在某一個時刻的狀態,這樣以後需要時它才能恢復到先前的狀態 7 * 如果一個用介面來讓其他對象直接得到這些狀態,將會暴露對象的實現細節並破壞對象封裝信 8 * 時間:2016年3月6日下午8:58:55 9 * 作者:cutter_point 10 */ 11 public class Test 12 { 13 public static void main(String[] args) 14 { 15 //開啟游戲,初始化狀態 16 GameRole gr = new GameRole(); 17 gr.getInitState();//初始化狀態 18 gr.display(); 19 20 //保存進度點 21 RoleStateCaretaker rsc = new RoleStateCaretaker(); 22 rsc.setMemento(gr.saveState()); 23 24 //大戰boss 25 gr.fight(); 26 gr.display(); 27 28 //恢復狀態 29 gr.recoveryState(rsc.getMemento()); 30 gr.display(); 31 32 } 33 }
攻擊力:100 生命力:100 防禦力:100 攻擊力:60 生命力:60 防禦力:40 攻擊力:100 生命力:100 防禦力:100