
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