微信的网站,wordpress系统加载慢,南宁网站 制作,jquery网站模板下载设计模式—行为型模式之备忘录模式
备忘录#xff08;Memento#xff09;模式#xff1a;在不破坏封装性的前提下#xff0c;捕获一个对象的内部状态#xff0c;并在该对象之外保存这个状态#xff0c;以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模…设计模式—行为型模式之备忘录模式
备忘录Memento模式在不破坏封装性的前提下捕获一个对象的内部状态并在该对象之外保存这个状态以便以后当需要时能将该对象恢复到原先保存的状态。该模式又叫快照模式。这是一种对象行为型模式。
有如下角色 发起人Originator角色记录当前时刻的内部状态信息提供创建备忘录和恢复备忘录数据的功能实现其他业务功能它可以访问备忘录里的所有信息。 备忘录Memento角色负责存储发起人的内部状态在需要的时候提供这些内部状态给发起人。 管理者Caretaker角色对备忘录进行管理提供保存与获取备忘录的功能但其不能对备忘录的内容进行访问与修改。
示例
比如我们有一个奥特曼游戏每一个奥特曼有血量等级我们可以建一个游戏备份来保存这些有用的内容并使用游戏服务器管理他们。
奥特曼类如下
Data
public class Ultraman {private Integer hp;//血量private Integer level;//等级//备忘录管理者private GameServer gameServer new GameServer();/*** 进行游戏*/public void play(){hp level new Random().nextInt();}/*** 保存备忘录*/public void saveRocord() throws Exception {System.out.println(保存备忘录);gameServer.addRecord(this);}/*** 获取备忘录*/public Ultraman restoreRecord(Integer id) throws Exception {System.out.println(获取记录);return gameServer.getRecord(id);}public void exit() throws Exception {System.out.println(退出并存档);gameServer.addRecord(this);}
}记录类如下
/*** 游戏备份----备忘录*/
Data
public class GameRocord {private Integer id;//备忘录idprivate Integer hp;//血量private Integer level;//等级
}游戏服务器类如下
/*** 游戏服务器——备忘录管理者*/
public class GameServer {//记录idprivate Integer i 1;//备忘录管理private MapInteger,GameRocord recordMap new HashMap();/*** 添加备忘录*/public void addRecord(Ultraman ultraman) throws Exception {GameRocord gameRocord new GameRocord();BeanUtils.copyProperties(gameRocord,ultraman);gameRocord.setId(i);recordMap.put(gameRocord.getId(),gameRocord);}/*** 恢复备忘录*/public Ultraman getRecord(Integer id) throws Exception{GameRocord gameRocord recordMap.get(id);Ultraman ultraman new Ultraman();BeanUtils.copyProperties(ultraman,gameRocord);return ultraman;}}测试类如下
public class MementoTest {public static void main(String[] args) throws Exception {Ultraman ultraman new Ultraman();//进行游戏ultraman.play();//存档ultraman.saveRocord();ultraman.setHp(1);ultraman.saveRocord();Ultraman ultramanRecord ultraman.restoreRecord(1);ultraman.exit();}
}运行截图如下