Java设计模式学习记录-备忘录模式

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

举例

我们还是用一个小例子来简单介绍一下备忘录模式,在玩一个步骤游戏时,每走一步时步数都加一,遇到道具可以快速走几步,或者减几步。用备忘录模式的思想来实现这个逻辑,就是如下代码。

游戏类

/**

* 游戏 */@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方法。看完了这个小例子,大概应该知道备忘录模式是个什么逻辑了吧,有点类似咱们平时知道的事务回滚的机制。下面还是分析一下,备忘录模式都是由哪些部分组成的。

备忘录模式结构

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值