【設計模式】18、備忘錄模式


 

 

 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

  

 


注意!

本站转载的文章为个人学习借鉴使用,本站对版权不负任何法律责任。如果侵犯了您的隐私权益,请联系我们删除。



 
粤ICP备14056181号  © 2014-2020 ITdaan.com