java游戏快捷存档_JAVA设计模式-备忘录模式-Memento-游戏备份存档

19. Memento(备忘录)

0818b9ca8b590ca3270a3433284dd417.png

意图:

在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。

适用性:

必须保存一个对象在某一个时刻的(部分)状态, 这样以后需要时它才能恢复到先前的状态。

如果一个用接口来让其它对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

解释:

这个貌似没啥可以解释的= =

实现:

实现一个有两个存档的"game"类

oringinator

class Game {

int life = 0;

int mana = 0;

Game(int life, int mana) {

this.life = life;

this.mana = mana;

}

void action(int dLife, int dMana) {

this.life += dLife;

this.mana += dMana;

}

void output() {

System.out.println("生命" + life + ",魔法" + mana);

}

//存档

GameState save() {

return new GameState(this);

}

//读档

void load(GameState gameState) {

gameState.getState(this);

}

}

mementor

class GameState {

private int life;

private int mana;

GameState(Game game) {

life = game.life;

mana = game.mana;

}

void setState(Game game) {

life = game.life;

mana = game.mana;

}

void getState(Game game) {

game.life = life;

game.mana = mana;

}

}

caretaker

class StateManager {

private GameState gameState1;

private GameState gameState2;

GameState getGameState1() {

return gameState1;

}

void setGameState1(GameState gameState1) {

this.gameState1 = gameState1;

}

GameState getGameState2() {

return gameState2;

}

void setGameState2(GameState gameState2) {

this.gameState2 = gameState2;

}

}

测试:

public static void main(String[] args) {

Game game = new Game(100, 100);

StateManager stateManager=new StateManager();

//此时状态 生命100,魔法100

game.output();

//保存状态1 生命100,魔法100

stateManager.setGameState1(game.save());

game.action(-100, -100);

//此时状态 生命0,魔法0

game.output();

//保存状态2 生命0,魔法0

stateManager.setGameState2(game.save());

//读取状态1 生命100,魔法100

game.load(stateManager.getGameState1());

//此时状态 生命100,魔法100

game.output();

//读取状态2 生命0,魔法0

game.load(stateManager.getGameState2());

//此时状态 生命0,魔法0

game.output();

}

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值