每日设计模式——备忘录模式

      悲剧了,周六那天不知道怎么了,困得要死,然后就直接睡过去了……结果状态模式看是看了,但是实现的时候出了些问题,反正是不通。昨天赶工,然后回来也只看了备忘录模式,只来得及实现,结果……学校断网,没有办法,只好先实现了,然后今天来更新,结果今天忘了把《大话设计模式》带回来,迭代器模式虽然看了,但是实现的话恐怕有点难度……而且迭代器模式,嗯,好多语言都封装了各种迭代器,就像工厂模式也被各种封装了一样,所以,确实觉得这种已经被封装好了的东西只要会用成品就可以,就没怎么仔细看代码……嗯,明天实现吧。

      备忘录模式是在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。其适用性体现在必须保存一个对象在某一时刻的(部分)状态,这样以后需要时它才能恢复到先前的状态;如果用接口来让其他对象直接得到这些状态,将会暴露对象的实现细节并破坏对象的封装性。

      《大话设计模式》里面讲的是游戏中如果跟boss战斗,然后输掉了战斗,要恢复到战斗前的状态重来,这时要恢复某些状态。其实我觉得那个例子不妥啊,输了就直接从游戏里被踢出去了,想从来要读档的,存档是硬盘文件,文件中当然会详细记录所有的状态。最扯的是,那个命名啊,居然是李逍遥……让我着实汗了一把……看来仙剑的力量不容小觑。

      在古剑中,其实还是战斗的问题,我记得我之前也想过这个问题,我想的是人物状态必须要存两份的,战斗过后是要恢复一部分状态的。异常状态可以不记录,战斗后不分青红皂白全让他不异常就可以,这些状态包括冰冻,金属化,狂,残,中毒,无敌等好多种吧。有一部分是不需要恢复的,主要是精气神这三个值,打完了该是多少是多少,除非升级了可能会补充一些,但我不知道那个是福利还是bug,对了,有的招式要花钱的,还有钱……还有一些状态是要恢复的,这就要用到备忘录模式,这些状态主要有攻防速运,还有五行的灵力值(这个值在战斗中貌似使用某些物品会被改变)。当然还有很多属性是不需要恢复的,像五行吸收、反弹,物理吸收、反弹等装备附加属性。也就是说,这里用到的备忘录模式所保存的只是对象的很小一部分状态,因为《大话设计模式》中强调过,如果要保存对象的大部分状态,而且对象的状态很多的时候,要考虑内存的开销,这里通过分析,其实我们要备忘的只是一少部分状态,大部分状态只要有一份就可以了,即内存的消耗不会很高。嗯,这个模式解决了我之前比较弱智的想法, 这个模式好~

      代码如下:

memento.h 文件

 

 

memento.cpp 文件

 

 

originator.h文件

 

 

originator.cpp 文件

 

 

caretaker.h 文件

 

 

caretaker.cpp 文件

 

 

main.cpp文件

 

 

运行结果:

 

 

我就说,真是,好不容易有个搜狗好用点,速度还那么慢,用google的浏览器固然还行,碰上CSDN和新浪邮箱那种的是一点招都没有……我真是汗流浃背啊……还有什么浏览器靠谱啊……

另外,最近这些设计模式都看不懂了……肿么办啊……我先用正好那个小项目的代码得重构,虽说是C#写的,但是设计模式的思想都是一样的,我用几个设计模式的思路进去好了。不过这个得想想,好多东西还是想不好不愿意动手……

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值