当前位置:网站首页 > 技术博客 > 正文

备忘录设计图



[版权申明] 非商业目的注明出处可自由转载
博文地址:https://blog.csdn.net/ShuSheng0007/article/details/
出自:shusheng007

设计模式汇总篇,强烈建议要点赞收藏:

永不磨灭的设计模式(有这一篇真够了,拒绝标题党)

备忘录模式听起来特别高深,其实可能写过几年代码的都不知不觉的用了很多次了。模式的名称其实已经很形象的反映出其作用了:就是为了在某一时刻把当前的状态记录下来,以后再恢复到那时的状态。

行为型(behavioral)

2颗星

在不破坏封闭的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态,从而可以将对象恢复到原先保存的状态

当你正在开发一个功能,这个功能需要存档的时候就应该想到它。例如游戏,文档编辑器等等,都需要在你下次重新打开的时候恢复到你关闭它时候的状态。

王二狗在享元模式那集帮他儿子开发了个五子棋游戏,儿子玩过几次后提出了一个痛点:

儿子:老爸,我经常玩到一半的时候妈妈就喊我去睡觉,然后我睡醒了打开它就变成新的了,你能不能在我睡觉的时候把它存起来,那样我玩的时候就能从上次停下来的地方开始了…balabala。

二狗:听着那小子一直巴巴,二狗陷入了沉思:养个儿子真费劲,这么小就使唤老子,长大了还的帮着娶媳妇,关键是房子tm那么贵,以后还的带孙子…这要是个闺女多好…

儿子:老爸,你干啥呢,你听见我说话了吗…

二狗:听见拉,听见啦,我这就给你弄,但是你以后拉粑粑让你妈擦屁股啊,不要叫我了,听见没?

二狗思索了一下,此情此景正是备忘录模式的用武之地。

备忘录模式有3个角色

  • Originator

我们知道备忘录模式就是要完成保存状态,然后恢复状态的功能。那么保存和恢复谁的状态呢?对了,就是这个角色的状态。

  • Memento

这个就比较简单了,就是一个存储状态的类,里面没有业务逻辑,一般是一个POJO。

  • CareTaker

负责保存和恢复的状态,状态是保存在这类里面的。

这个类是游戏类,我们就是要保存和恢复游戏进度。它内部提供了两个方法,一个对外提供备忘录,里面封装了其要恢复的内部状态。另一个是从外部接收备忘录,用来恢复内部状态。

可能有的同学要问了:为什么要这么搞呢?直接写个setter不香吗?其实核心思想还是为了封装。这里的是的内部状态,我们不愿意对外暴露,所以使用另一个对象包起来。这样的内部状态一般会有很多,这里做了简化。

 

这个类最简单,其基本上就是一个POJO。它不包含业务逻辑,只包含状态数据,结构由要保存的状态类决定。例如我们这里只保存一个内部状态,游戏分数。

 

如果说备忘录模式有一点点技巧的话,也就是这个类了。相对于来说是一个外部组件,它帮助保存了状态,相当于将自己某一个时刻的状态保存到了外部。

当我们要保存状态时,使用此类的。当我们要恢复状态时,使用此类的

 
 

输出结果

 
  • 首先识别出Originator需要保存的状态,然后构建一个备忘录类Memento
  • Originator需要提供两个方法,一个用于对外提供包含内部状态的备忘录,一个用于使用外部传递进来的备忘录恢复内部状态
  • CareTaker 负责保存备忘录,并提供访问方法。

设计模式值得你可以练习!

最近突然有想躺平的念头,然而月初银行催房贷的短信彻底打破了我的美好愿望,哎啥时候才能躺平啊,怕站着被镰刀从根部给割了…

希望待你老去之时,回顾你的IT生涯,脸上可以泛起一丝回念笑容…

GitHub源码地址:design-patterns

版权声明


相关文章:

  • 分段锁的实现原理2025-05-23 11:29:59
  • tinyxml gettext2025-05-23 11:29:59
  • matlab的fread2025-05-23 11:29:59
  • vue3与vue2.5区别大吗2025-05-23 11:29:59
  • stm32if语句2025-05-23 11:29:59
  • 驼峰命名法属于基本的命名规范2025-05-23 11:29:59
  • mipi dsi接口定义2025-05-23 11:29:59
  • redisson集群模式2025-05-23 11:29:59
  • ktv终于有人分享完整版了2025-05-23 11:29:59
  • maven镜像的作用2025-05-23 11:29:59