java之备忘录模式_java 之 备忘录模式(大话设计模式)

备忘录模式,给笔者的感觉,我们在实际开发中很少用到,至少笔者是没用到过。一般在游戏后台开发应该会经常用到吧!当然这只是

笔者的推断。先看下类图

大话设计模式-类图

716ad71cd4bebcec48d4160dc752fb73.png

再继续看下Demo吧

/*** 需要保存的进度信息类*/

public classRoleSateMemento{privateInteger atk;privateInteger vit;privateInteger attack;publicRoleSateMemento(Integer atk, Integer vit, Integer attack) {super();this.atk =atk;this.vit =vit;this.attack =attack;

}publicInteger getAtk() {returnatk;

}public voidsetAtk(Integer atk) {this.atk =atk;

}publicInteger getVit() {returnvit;

}public voidsetVit(Integer vit) {this.vit =vit;

}publicInteger getAttack() {returnattack;

}public voidsetAttack(Integer attack) {this.attack =attack;

}

}

/*** 存储进度类*/

public classRolerStateCaretaker {privateRoleSateMemento roleSateMemento;publicRoleSateMemento getRoleSateMemento() {returnroleSateMemento;

}public voidsetRoleSateMemento(RoleSateMemento roleSateMemento) {this.roleSateMemento =roleSateMemento;

}

}

/*** 角色类*/

public classRolerInfo {privateInteger atk;privateInteger vit;privateInteger attack;publicRolerInfo(Integer atk, Integer vit, Integer attack) {super();this.atk =atk;this.vit =vit;this.attack =attack;

}public staticRolerInfo initRoler() {return new RolerInfo(100, 100, 100);

}public voidshowState() {

System.out.println("当前血量: " +vit);

System.out.println("当前攻击力: " +atk);

System.out.println("当前防御力: " +attack);

}publicRoleSateMemento saveRolerInfo() {return newRoleSateMemento(atk, vit, attack);

}public voidrestoreMenmento(RoleSateMemento roleSateMemento) {this.vit =roleSateMemento.getVit();this.atk =roleSateMemento.getAtk();this.attack =roleSateMemento.getAttack();

}publicInteger getAtk() {returnatk;

}public voidsetAtk(Integer atk) {this.atk =atk;

}publicInteger getVit() {returnvit;

}public voidsetVit(Integer vit) {this.vit =vit;

}publicInteger getAttack() {returnattack;

}public voidsetAttack(Integer attack) {this.attack =attack;

}

}

/*** 客户端*/

public classTest {public static voidmain(String[] args) {

RolerInfo role=RolerInfo.initRoler();

System.out.println("----------大战BOSS之前----------");

role.showState();//保持进度

RolerStateCaretaker caretaker = newRolerStateCaretaker();

caretaker.setRoleSateMemento(role.saveRolerInfo());//大战BOSS

role.setAtk(0);

role.setAttack(0);

role.setVit(0);

System.out.println("----------大战BOSS----------");

role.showState();//恢复存档

role.restoreMenmento(caretaker.getRoleSateMemento());

System.out.println("----------恢复----------");

role.showState();

}

}

运行结果

----------大战BOSS之前----------当前血量:100当前攻击力:100当前防御力:100

----------大战BOSS----------当前血量:0当前攻击力:0当前防御力:0

----------恢复----------当前血量:100当前攻击力:100当前防御力:100

简单看下记忆类和负责保存记忆的类,其实就是几个属性,然后还有set,get方法,并不复杂,主要的逻辑还是在角色类里。笔者之前看大话设计模式时

一直误解为什么角色类里面的属性和记忆类里面的属性相同,而不让角色类继承记忆类呢? 后来仔细想下,原因是,角色里面有很多属性不需要保存。打个比方

角色的性别不会因为大战BOSS之后就变性,所以性别并不需要保存,所以这里没有用继承,记忆只是负责保存需要保存的属性。

以上是笔者对备忘录模式的理解,希望能帮助学习的小伙伴。另外笔者强烈推荐学习的小伙伴多看看大话设计模式,然后领悟其精髓,自己在手动写一次代码。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值