18.备忘录模式

来源:互联网 发布:win7人工智能 编辑:程序博客网 时间:2024/05/19 04:26
package memento;/* * :以前的小霸王游戏是不是可以保存游戏进度? * :是的 * :那是怎么实现的呢? * :应该是... * :来 先简单实现一下   *  */public class Commonly {public static void main(String[] args) {GameRole gameRole = new GameRole();gameRole.GetInitState();gameRole.Display();//备份GameRole gameRole2 = new GameRole();gameRole2.setVit(gameRole.getVit());gameRole2.setAtk(gameRole.getAtk());gameRole2.setDef(gameRole.getDef());gameRole.Fight();gameRole.Display();//恢复状态gameRole.setVit(gameRole2.getVit());gameRole.setAtk(gameRole2.getAtk());gameRole.setDef(gameRole2.getDef());gameRole.Display();/* * 把属性给用户开放了 不是很好的选择   代码未错未必优 */}}class GameRole{//生命力private int vit;//攻击力private int atk;//防御力private int def;/* * 展示角色信息 */public void Display(){System.out.println("角色当前状态:");System.out.println("体力:"+vit);System.out.println("攻击力"+atk);System.out.println("防御力"+def);}/* * 获得初始状态 */public void GetInitState(){this.vit = 100;this.atk = 100;this.def = 100;}/* *战斗 */public void Fight(){this.vit = 0;this.atk = 0;this.def = 0;}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;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}
package memento;/* * 备忘录模式: *  在不破坏封装性的前提下,捕获一个对象的内部状态 *  并在该对象之外保存这个状态 这样以后就可以将该对象恢复到原有保存的状态 *   *   *  : *  发起人 *  备忘录 *  管理者 */public class Memento {public static void main(String[] args) {Role role = new Role();role.GetInitState();//展示信息role.Display();//备份RoleState roleState = role.RoleStateMemento();//战斗role.Fight();role.Display();//恢复role.RoleStateMemento(roleState);role.Display();/* * 很明显这里的三个属性没有给调用者开放  * 这样不管是备份还是恢复都很方便   */}}class Role{//生命力private int vit;//攻击力private int atk;//防御力private int def;/* * 保存游戏角色属性 */public RoleState RoleStateMemento(){return  new RoleState(vit,atk,def);}/* * 恢复游戏角色 */public void RoleStateMemento(RoleState roleState ){this.vit = roleState.getVit();this.atk = roleState.getAtk();this.def = roleState.getDef();}/* * 展示角色信息 */public void Display(){System.out.println("角色当前状态:");System.out.println("体力:"+vit);System.out.println("攻击力"+atk);System.out.println("防御力"+def);}/* * 获得初始状态 */public void GetInitState(){this.vit = 100;this.atk = 100;this.def = 100;}/* *战斗 */public void Fight(){this.vit = 0;this.atk = 0;this.def = 0;}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;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}/* * 角色状态类(专门存角色的各种属性) */class RoleState{public RoleState(int vit,int atk,int def){this.vit = vit;this.atk = atk;this.def = def;}//生命力private int vit;//攻击力private int atk;//防御力private int def;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;}public int getDef() {return def;}public void setDef(int def) {this.def = def;}}


原创粉丝点击