【设计模式】18、备忘录模式
2016-03-06 22:23
387 查看
![](http://images2015.cnblogs.com/blog/873394/201603/873394-20160306222133049-234628803.png)
package com.shejimoshi.behavioral.Memento; /** * 功能:游戏角色 * 时间:2016年3月6日下午9:39:18 * 作者:cutter_point */ public class GameRole { private int attackPower; //攻击力 private int blood; //血量 private int defense; //防御力 public void getInitState() { attackPower = 100; blood = 100; defense = 100; } public void display() { System.out.println("攻击力:" + attackPower + "\t生命力:" + blood + "\t防御力:" + defense); } //保存当前存储点 public Memento saveState() { return new Memento(attackPower, blood, defense); } public void recoveryState(Memento memento) { this.attackPower = memento.getAttackPower(); this.blood = memento.getBlood(); this.defense = memento.getDefense(); } public void fight() { this.attackPower -= 40; this.blood -= 40; this.defense -= 60; } }
package com.shejimoshi.behavioral.Memento; /** * 功能:存储状态管理者 * 时间:2016年3月6日下午10:10:23 * 作者:cutter_point */ public class RoleStateCaretaker { private Memento memento; public Memento getMemento() { return memento; } public void setMemento(Memento memento) { this.memento = memento; } }
package com.shejimoshi.behavioral.Memento; /** * 功能:游戏存储点,备忘录 * 时间:2016年3月6日下午9:46:03 * 作者:cutter_point */ public class Memento { private int attackPower; //攻击力 private int blood; //血量 private int defense; //防御力 public Memento(int attackPower, int blood, int defense) { this.attackPower = attackPower; this.blood = blood; this.defense = defense; } public int getAttackPower() { return attackPower; } public void setAttackPower(int attackPower) { this.attackPower = attackPower; } public int getBlood() { return blood; } public void setBlood(int blood) { this.blood = blood; } public int getDefense() { return defense; } public void setDefense(int defense) { this.defense = defense; } }
package com.shejimoshi.behavioral.Memento; /** * 功能:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先的状态 * 适用:必须保存一个对象在某一个时刻的状态,这样以后需要时它才能恢复到先前的状态 * 如果一个用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象封装信 * 时间:2016年3月6日下午8:58:55 * 作者:cutter_point */ public class Test { public static void main(String[] args) { //开启游戏,初始化状态 GameRole gr = new GameRole(); gr.getInitState();//初始化状态 gr.display(); //保存进度点 RoleStateCaretaker rsc = new RoleStateCaretaker(); rsc.setMemento(gr.saveState()); //大战boss gr.fight(); gr.display(); //恢复状态 gr.recoveryState(rsc.getMemento()); gr.display(); } }
攻击力:100 生命力:100 防御力:100 攻击力:60 生命力:60 防御力:40 攻击力:100 生命力:100 防御力:100
相关文章推荐