设计模式18备忘录模式

Posted cutter_point

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式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

  

 

以上是关于设计模式18备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章

[Python设计模式] 第18章 游戏角色备份——备忘录模式

设计模式18备忘录模式

18.备忘录模式

设计模式备忘录模式 ( 简介 | 适用场景 | 优缺点 | 代码示例 )

23种设计模式归纳总结——行为型

23种设计模式归纳总结——行为型