00:02
备忘录。设计模式的注意事项和细节,我们来看一下,那首先我们可以看到它给用户提供了一种可以恢复状态的机制,对吧?可以让我们用户呢,回到比较方比较方便的回到某个历史的状态,比如说我们刚才讲过,如果你用一个集合来存放的话呢,你其实是可以存放多个状态的,你先回你想回到哪个状态,那么也可以非常方便的回到某个状态。第二个呢,它实现了信息的封装,使得用户呢不再需要关心状态的细节。对,其实那同学们刚才也可以看到我们这个game roll呢,其实他只要说我要保存就可以了。至于他怎么保存并不关心,点C保存,然后呢要恢复recover就恢复了明白,所以他并不关心你这个状态到底指的是什么,因为你程序已经写好了,第二个,第三,第三个,如果类的成员变量过多,那么这个时候势必造成较大的资源浪费,而且每一次保存呢,都会消耗一定的内存,这个需要同学们注意。
01:06
那适用的场景在哪些地方呢?比如说咱们有一个项目要后悔药,对吧?卖后悔药,比如说我买了药过后,突然到这个阶段,我不想买了回去,还有打游戏的存档,Windows的CTRL加Z,你CTRL加Z其实也是这样子的,你先复制,然后。呃,他每操作一次,我们就保存一次,然后CTRLZ就回复到上一次IE的后退,还有数据库的事务管理,比如说我们有个叫做提交或者roll back回退。那么第五点为了节省内存呢?备忘录模式可以和原型模式配合使用,那这样子原型模式我们只需要。怎么样啊,结合我们原型模式,可以对我们资源进行一个节省。因为我们可以快速的复制一个对象,好同学们,那关于我们这个备忘录模式的注意事项我们就说到这,然后呢,我们把。这个备忘录模式的内容进行一个梳理,我们看一下我们讲了哪些内容。
02:03
好,我们来看看备忘录模式具体的内容的一个梳理。好的,我们来看一下。首先。首先呢,我们对,首先我们干什么呀,看一下提出的问题。我们提出了一个游戏角色状态怎么去恢复的问题。提出这个问题以后呢,我们首先想到的是一个传统方法来解决,传统方法呢,它是嗯,比较容易想到的,就是说我们给每一个对象,大家看这个图,我们给每一个对象呢,都设计一个对象状态给它对应。甚至也可以把,甚至我们说也可以把对象状态呢,直接用一个集合放在这个对象本身是吧,也是可以的,但这样子呢,大家也可以看到是有弊端的,它带来的弊端是哪些呢?我们来做一个简单的分析,我们分析到有这么几个问题。
03:01
OK,来看一下。哪几个问题呢?我们这儿总结了一下。对,我们这总结了一下。说如果我们用传统方式来解决呢?我们游戏的对象很多,对,那么不利于管理,开销也很大。于是我们就提出了,而且它保存也不方便,说白了对不对,传统方式呢,它通过六对象,这个太麻烦了,所以说我们提出了备忘录模式,因为备忘录模式呢,它可以根据你的实际情况,直接save,直接recover就完事了啊,这样子更合理,更合理,所以说我们就提出了新的一个解决方案,什么呢?就是备忘录,所以我们先对备忘录模式做了一个基本的介绍。那备忘录模式它主要指的是什么含义呢?我们来看一下。对,我们来看一下。从这。备忘录模式的基本含义。它的基本含义是这样子,在不破坏封装性的前提下。对,捕获到一个用户的内部状态。
04:03
然后并在该对象之外保存这个状态,所以说我们其实是有一个专门的备忘录对象来保存这个对象的状态的,这样呢,我们可以将该对象恢复到原先的状态。原先保存的状态对吧,这样就比较方便。OK。那备忘录模式我们这边做了一个简单理解,就好像我们要去回忆一件事情,我们先把它记下来,然后找到那件事再恢复恢复就行了。这是他的一个文字描述,紧接着呢,为了加深理解,对不对,我们画了一个类图,并且对这个类图呢,他的角色做了一个分析,这样呢,我们就比较直观的能够理解。备忘录模式的含义,好,这个是他的一个说明来描述到这里。那一共我们说了几点呢?来看一下。我们一共整理了这么几点。第一点。Original。RG的代表什么含义?第二个我们说了一下,Momentmental表示什么含义?
05:02
对吧,他其实就是一个备忘录对象。然后呢,我们这儿还有一个角色叫carr。Caretaker呢,就是一个守护的对象,里面包含了或者是呃嗯,包含了多个我们要管理的备用备用的对象这样子。那这个类图我们也拿过来了。是这样的吧,同学们。讲完这个原理类图过后,我们还写了一段代码,是不是有这次呢?我们原理图配的有代码的代码实现。代码实现。好,我们把代码实现呢,给各位同学板书到这边来,代码实现其实就是一个zero。S,这里面的好,把它粘贴拷贝到我们的笔记中。OK,我把它呢放大。放在笔这个位置就可以了。那为了加深大家对备忘录的理解呢?我们紧接着使用备忘录模式来解决了前面的一个需求,是不是前面的哪个需求就是游戏角色恢复的一个实力?好,我们来看看怎么完成的。
06:05
对,我们看看怎么完成的,OK。那我们首先呢,给他说了一下这个需求,具体什么需求,然后呢,画了一个对应的类图,并且用代码实现,那对应的类图在哪里,我们来看一下,其实就是这个图。是不是这个图。这就是我们应用实例的类图。那应用实例有了过后呢,我们紧接着用代码来实现这一把,代码就在哪里呢?就在game这个地方。我们把它拿过来。忍,忍是压一个包。Game这个包好,然后把它放在我们的笔记中好,这样大家以后复习起来比较方便。把这个讲完了以后,同学们,我们紧接着说了一下备忘录,他的一些注意事项和细节,他主要是带来一个什么问题呢,就说如果说你我们先把这个写完哈,诶这个怎么写到这了。
07:00
对,是这个。就说它带来的一个需要同学们考虑的问题,如果类的成员变量比较多,就说我们,嗯,一个呢,它的属性很多,我们要保存的状态信息太多,就会浪费比较大的资源,而且因为你你可能是保存的不是一个状态,是多个是吧,每隔一定时间保存一个,我每个一个时间保存一个,而且你可能是保的是多个origin的多个状态,那这个时候对我们资源浪费呢,是有一定消耗的。对我们资源是有一定消耗的,这点请同学们要注意。啊,但是呢,如果说我们配合原型模式还是有一定帮助,因为呃,大家知道原型模式哈,我们在这边。讲原型模式的时候说过,如果说我们这个成员属性,它它保存的状态,这个成员变量还需要去引有一个引用类型,那这个时候我们这个深拷贝浅拷贝就能用到,我们可以用到深拷贝,明白这意思吧,好,这样呢就更利于我们去保存某一个对象的某一个状态,就比较完整。但是呢,它带来的带来就是需要占用比较大的资源,这点请同学们注意一下。
08:05
好,关于它的使用注意事项,我们就聊到这。诶,这边我们。给它编一号。那同学们关于。备忘录模式的内容我们就讲到这里。
我来说两句