标签:
备忘录模式是一种软件设计模式:在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。一听到备忘录这个字的时候想起了小小时打的游戏,每次遇到大boss的时候都会保存一下进度,打过了就不需要恢复记录,打不过肯定就复原到刚刚保存的记录咯,重新打一遍BOSS,打死为止。哈哈,这就是备忘录模式,虽然很多模式都只是学到基础,但是发现越来越接近生活了。
package com.roc.meomory; /** * 游戏角色 * @author liaowp * */ public class GameRole { private int vit; private int atk; public void init(){ vit=100; atk=100; } public void show(){ System.out.println("体力:"+vit); System.out.println("攻击力:"+atk); } public void fightBoss(){ this.vit=0; this.atk=0; } public RoleStateMemento saveMemento(){ return (new RoleStateMemento(vit, atk)); } public void recove(RoleStateMemento roleStateMemento){ this.vit=roleStateMemento.getVit(); this.atk=roleStateMemento.getAtk(); } }
package com.roc.meomory; /** * 游戏角色管理类 * @author liaowp * */ public class RoleStateMange { private RoleStateMemento memento; public RoleStateMemento getMemento() { return memento; } public void setMemento(RoleStateMemento memento) { this.memento = memento; } }
package com.roc.meomory; /** * 存储类 * @author liaowp * */ public class RoleStateMemento { private int vit; private int atk; public RoleStateMemento(int vit, int atk){ this.vit=vit; this.atk=atk; } public int getVit() { return vit; } public void setVit(int vit) { this.vit = vit; } public int getAtk() { return atk; } public void setAtk(int atk) { this.atk = atk; } }
package com.roc.meomory; /** * 备忘录模式 * @author liaowp * */ public class Client { public static void main(String[] args) { GameRole liaowp=new GameRole(); liaowp.init(); liaowp.show(); RoleStateMange adminMange=new RoleStateMange(); adminMange.setMemento(liaowp.saveMemento());//保存 liaowp.fightBoss(); liaowp.show(); liaowp.recove(adminMange.getMemento()); liaowp.show(); } }
适合功能比较复杂的,但需要维护或记录属性历史的功能。
标签:
原文地址:http://www.cnblogs.com/liaoweipeng/p/5791064.html