举例
我们还是用一个小例子来简单介绍一下备忘录模式,在玩一个步骤游戏时,每走一步时步数都加一,遇到道具可以快速走几步,或者减几步。用备忘录模式的思想来实现这个逻辑,就是如下代码。
游戏类
/**
* 游戏 */@Datapublic class Game {
/** * 玩家走的步数 */
private int playerStep;
/**
* 备份游戏
* @return
*/
public GameMemento createGameMemento(){
return new GameMemento(playerStep);
}
/**
* 开始玩游戏 */
public void play(){
playerStep = 0;
}
/**
* 恢复备份
* @param gameMemento */
public void restore(GameMemento gameMemento){
this.playerStep = gameMemento.getPlayerSteps();
}}
备份
/**
* 备份 */@Getterpublic class GameMemento {
/** 步数 */
private int playerSteps;
/**
* 备份步数
* @param playerSteps
*/ public GameMemento(int playerSteps){
this.playerSteps = playerSteps;
}}
备份信息管理类
/**
* 备份信息管理类 */public class Caretaker {
/** 备份 */
private GameMemento gameMemento;
/** 恢复备份 */
public GameMemento retrieveMemento(){
return this.gameMemento;
}
/** 保存备份 */
public void saveMemento(GameMemento gameMemento){
this.gameMemento = gameMemento;
}}
测试
public class Player {
public static void main(String[] args) {
Game game = new Game();
System.out.println(“游戏开始,捡到滑板,前进10步”);
game.setPlayerStep(10);
//备份当前状态
System.out.println(“备份当前状态”);
GameMemento gameMemento = game.createGameMemento();
Caretaker caretaker = new Caretaker();
caretaker.saveMemento(gameMemento);
System.out.println(“备份完成”);
game.play();
System.out.println(“踩到便便了,当前步数为:”+game.getPlayerStep());
System.out.println(“还原到之前一步”);
game.restore(caretaker.retrieveMemento());
System.out.println(“恢复完成,当前玩家步数是:”+game.getPlayerStep());
}}
运行结果
游戏开始,捡到滑板,前进10步备份当前状态备份完成踩到便便了,当前步数为:0还原到之前一步恢复完成,当前玩家步数是:10
上面的这个例子使用了lombok插件的注解例如:@Getterhe@Data所以少写了getter和setter方法。看完了这个小例子,大概应该知道备忘录模式是个什么逻辑了吧,有点类似咱们平时知道的事务回滚的机制。下面还是分析一下,备忘录模式都是由哪些部分组成的。
备忘录模式结构
数为:0还原到之前一步恢复完成,当前玩家步数是:10
上面的这个例子使用了lombok插件的注解例如:@Getterhe@Data所以少写了getter和setter方法。看完了这个小例子,大概应该知道备忘录模式是个什么逻辑了吧,有点类似咱们平时知道的事务回滚的机制。下面还是分析一下,备忘录模式都是由哪些部分组成的。