介绍
备忘录模式的定义
备忘录模式(Memento Pattern)在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。
这个模式的定义很好理解。其实就是备份数据,方便后续恢复,这里我们直接看案例。
案例
假如我们现在正在玩一款名为rim world的游戏,该游戏具有游戏数据,我们需要定时存档。这里需要一个类来专门管理存档,因为我们可能需要回退至不同时间的存档。
存档类
@Data
//存档类
public class Save {
//这里简单化,假设只有存档名
String name;
public Save(String name) {
this.name = name;
}
}
存档管理类
public class Memorandum {
HashMap<String,Save> saveHashMap=new HashMap<>();
public void add(Save save)
{
if(save.getName()==null){
System.out.println("存档错误");
return;
}
if(saveHashMap.get(save.getName())!=null){
System.out.println("即将覆盖存档");
}
saveHashMap.put(save.getName(),save);
}
public Save getSave(String name){
return saveHashMap.get(name);
}
}
游戏类
//游戏类
public class RimWorld {
//保存存档,这里应该要将游戏数据写入存档中,不过没有设计
public Save save(String name)
{
return new Save(name);
}
//读取存档,当然,因为我们没有设计存档内容,所以这里什么都不用处理
public void loadSave(Save save){
}
}
测试
@Test
public void test()
{
//创建一个游戏
RimWorld rimWorld=new RimWorld();
//游戏存档保存
Save save = rimWorld.save("存档1");
Memorandum memorandum=new Memorandum();
memorandum.add(save);
System.out.println(memorandum.getSave("存档1").getName()+"已保存");
//读取存档
Save save1 = memorandum.getSave("存档1");
rimWorld.loadSave(save1);
System.out.println(save1.getName()+"已读取");
}
测试结果
存档1已保存
存档1已读取