首页 > 代码库 > 设计模式13---备忘录模式
设计模式13---备忘录模式
最长见于游戏状态保存,该模式不需要知道游戏具体状态,只是保存起来,等待需要的时候恢复。
UML图:
orininator 类是对memonto类的操作类。
Memonto是状态类,记录了游戏的数据状态。
CareTaker是保存memonto的类,不能修改memonto的内容!
/*存取的内容,包含很多载体。 * * */public class StatusMemonto { private String _mStatus; public StatusMemonto(String status) { this._mStatus = status; } /** * @return the _mStatus */ public String getStatus() { return _mStatus; } }
/*StatusTaker 只能存取Memonto,不能修改memonto的内容。 * * * */public class StatusTaker { private StatusMemonto _mMemonto; /** * @return the _mMemonto */ public StatusMemonto get_mMemonto() { return _mMemonto; } /** * @param _mMemonto the _mMemonto to set */ public void set_mMemonto(StatusMemonto _mMemonto) { this._mMemonto = _mMemonto; } }
package com.jayfulmath.designpattern.memento;public class Player { private String status; /** * @return the status */ public String getStatus() { return status; } /** * @param status the status to set */ public void setStatus(String status) { this.status = status; } public StatusMemonto CreateMemontoStatus() { return new StatusMemonto(status); } public void setMemonto(StatusMemonto memoto){ this.status = memoto.getStatus(); }}
/*最长见于游戏状态保存,该模式不需要知道游戏具体状态,只是保存起来,等待需要的时候恢复。 * * * */public class MementoMain extends BasicExample { @Override public void startDemo() { // TODO Auto-generated method stub Player mPlayer = new Player(); mPlayer.setStatus("Before attack Boss"); System.out.println("Plaeyr status:"+mPlayer.getStatus()); StatusTaker taker = new StatusTaker(); taker.set_mMemonto(mPlayer.CreateMemontoStatus()); mPlayer.setStatus("GameOver"); System.out.println("Plaeyr status:"+mPlayer.getStatus()); mPlayer.setMemonto(taker.get_mMemonto()); System.out.println("Plaeyr status after restore:"+mPlayer.getStatus()); }}
运行结果:
Plaeyr status:Before attack BossPlaeyr status:GameOverPlaeyr status after restore:Before attack Boss
代码非常简单,但是经常会用到该模式。
该模式适用于功能比较复杂,但需要维护历史记录属性类。
当角色状态无效时,可以使用这个方式还原到有效的状态!
设计模式13---备忘录模式
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。