设计模式行为型备忘录模式
Posted lisin-lee-cooper
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了设计模式行为型备忘录模式相关的知识,希望对你有一定的参考价值。
一.概述
1.1 概述
又叫快照模式,在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,以便以后当需要时能将该对象恢复到原先保存的状态
1.2 结构
发起人(Originator)角色:记录当前时刻的内部状态信息,提供创建备忘录和恢复备忘录数据的功能,实现其他业务功能,它可以访问备忘录里的所有信息。
备忘录(Memento)角色:负责存储发起人的内部状态,在需要的时候提供这些内部状态给发起人。
管理者(Caretaker)角色:对备忘录进行管理,提供保存与获取备忘录的功能,但其不能对备忘录的内容进行访问与修改。
二.场景
游戏中的某个场景,一游戏角色有生命力、攻击力、防御力等数据,在打Boss前和后一定会不一样的,我们允许玩家如果感觉与Boss决斗的效果不理想可以让游戏恢复到决斗之前的状态.
三.类图及实现
public interface Memento
public class GameRole
private int vit;
private int atk;
private int def;
public void initState()
this.vit = 100;
this.atk = 100;
this.def = 100;
public void fight()
this.vit = 0;
this.atk = 0;
this.def = 0;
public Memento saveState()
return new RoleStateMemento(vit, atk, def);
public void recoverState(Memento memento)
RoleStateMemento roleStateMemento = (RoleStateMemento) memento;
this.vit = roleStateMemento.getVit();
this.atk = roleStateMemento.getAtk();
this.def = roleStateMemento.getDef();
public void stateDisplay()
System.out.println("角色生命力:" + vit);
System.out.println("角色攻击力:" + atk);
System.out.println("角色防御力:" + 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;
private class RoleStateMemento implements Memento
private int vit;
private int atk;
private int def;
public RoleStateMemento(int vit, int atk, int def)
this.vit = vit;
this.atk = atk;
this.def = 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;
public class RoleStateCaretaker
private Memento memento;
public Memento getMemento()
return memento;
public void setMemento(Memento memento)
this.memento = memento;
public class MementoMain
public static void main(String[] args)
System.out.println("------------大战Boss前------------");
GameRole gameRole = new GameRole();
gameRole.initState();
gameRole.stateDisplay();
RoleStateCaretaker roleStateCaretaker = new RoleStateCaretaker();
roleStateCaretaker.setMemento(gameRole.saveState());
System.out.println("------------大战Boss后------------");
gameRole.fight();
gameRole.stateDisplay();
System.out.println("------------恢复之前状态------------");
gameRole.recoverState(roleStateCaretaker.getMemento());
gameRole.stateDisplay();
以上是关于设计模式行为型备忘录模式的主要内容,如果未能解决你的问题,请参考以下文章
设计模式 行为型模式 实例 -- 备忘录模式实例:游戏备忘录