备忘录模式
来源:互联网 发布:漂亮的登录界面源码 编辑:程序博客网 时间:2024/06/05 18:56
备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
对于一个对象状态的保存,我们可能只要保存他的一部分,那么就需要一个备忘类来封装这一部分属性。由对象自己来对这部分属性进行封装保存,也就是备份。并且由对象自己来实现恢复操作调用备份类来恢复。
不如来看游戏角色类,他实现了备份操作:将需要的属性备份到备份类中,并实现了恢复操作从备份类中恢复数据:
public class GameRole { private int vit; private int atk; private int def; public void setVit(int v) { vit = v; } public int getVit() { return vit; } public void setAtk(int a) { atk = a; } public int getAtk() { return atk; } public void setDef(int d) { def = d; } public int getDef() { return def; } public RoleStateMemento saveState() { return new RoleStateMemento(vit, atk, def); } public void recoveryState(RoleStateMemento memento) { this.vit = memento.getVit(); this.atk = memento.getAtk(); this.def = memento.getDef(); } public void getInitState() { this.vit = 100; this.atk = 100; this.def = 100; } public void stateDisplay() { System.out.println("角色当前状态:"); System.out.println("Vitality: " + getVit()); System.out.println("Attack: " + getAtk()); System.out.println("Defense: " + getDef()); } public void fight() { this.vit = 0; this.atk = 100; this.def = 100; }}
角色其实状态是满状态100。战斗后生命值变为0。
来看备份类:
public class RoleStateMemento { private int vit; private int atk; private int def; public RoleStateMemento(int vit, int atk, int def) { this.atk = atk; this.vit = vit; this.def = def; } public void setVit(int v) { vit = v; } public int getVit() { return vit; } public void setAtk(int a) { atk = a; } public int getAtk() { return atk; } public void setDef(int d) { def = d; } public int getDef() { return def; }}
备份类只是对角色的一些属性进行了封装。
既然我们要将备份保存下来,就需要管理这个备份类,我的设想是甚至可以在备份管理类中建个list或者map,按时间顺序或者建档名来管理角色备份数据。
这里只实现了单备份数据的存取:
public class RoleStateCaretaker { private RoleStateMemento memento; public void setMemento(RoleStateMemento memento) { this.memento = memento; } public RoleStateMemento getMemento() { return memento; }}
最后贴下主程序:
GameRole maliao = new GameRole(); maliao.getInitState(); maliao.stateDisplay(); RoleStateCaretaker stateAdmin = new RoleStateCaretaker(); stateAdmin.setMemento(maliao.saveState()); maliao.fight(); maliao.stateDisplay(); maliao.recoveryState(stateAdmin.getMemento()); maliao.stateDisplay();
stateAdmin.setMemento(maliao.saveState());即由管理类来管理备份类。
0 0
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 备忘录模式
- 使用ajax编写异步查询
- Android快速发布项目到jcenter
- 计算机网络
- linux搭建网桥
- 最短路径问题平面上有n个点(n<=100),每个点的坐标均在-10000~10000之间。其中的一些点之间有连线。若有连线,则表示可从一个点到达另一个点,即两点间有通路,通路的距离为两点间的直线距离。
- 备忘录模式
- 09 事件驱动的OSAL简要分析
- 跳转到微信公众号主页,关注页面
- 各NoSQL数据库管理系统与模型比较
- Java字符串(三)--正则表达式
- 数据结构实验之队列一:排队买饭
- 2014年北理复试上机题
- CountDownLatch使用
- 四旋翼飞行器的飞控实现