不管我们是在使用word还是记事本,系统都会为我们提供撤销功能,这是几乎每个人都会用到的功能。在我们实际开发中,会不会有一个对于非常复杂的对象,当其中一个属性发生变化时,它也提供了撤销功能,可以快速恢复到更新前的状态。提供这个功能的模式也就是今天的话题——备忘录模式。1.概念理解书上的memo的解释是在不破坏封装的情况下捕获对象的内部状态,并将这个状态保存在对象外部,以便后面可以让对象恢复到原来保存的状态。其实就是在一个对象之外增加一个额外的复制对象。每当我们更改对象的某些属性时,我们都会构建一个副本并将副本存储在队列中。从副本恢复数据。显然,需要三个角色:原始对象、副本对象和存放副本的队列。即书中的三个角色定义:Originator(发起者角色):负责创建备忘录,记录需要保存的状态,具有状态回滚功能;即,原始对象。Memento(备忘录角色):用于存储Originator的内部状态,可以防止Originator以外的对象访问;即复制对象。Caretaker(管理员角色):负责存储、提供和管理Memento,不能操作和访问Memento的内容;即存放副本的队列。为了让概念落地,我们基于备忘录模式的思路实现了视频草稿箱的功能。在这个业务场景中,赞助商实际上是剪辑视频的剪辑师。我们可以在这个编辑器中做什么?编辑视频,从草稿箱导入,保存到草稿箱。这不就是始作俑者的作用吗!我们称之为编辑草稿。备忘录不是修改稿吗?我们称之为最终草案。完成的草稿就做好了,需要存放在一个列表中,供我们快速修复,当然是管理员角色。我们基于三个角色来实现代码。2.案例实现备忘录角色(定稿):是用来存储数据的基础对象。视频的属性主要是标题,封面,视频地址/***memo(finaldraft)*@authortcy*@Date16-09-2022*/publicclassVideoMemento{privateStringtitle;私有字符串videoUrl;私有字符串imgs;publicVideoMemento(Stringtitle,Stringcontent,Stringimgs){this.title=title;this.videoUrl=内容;这个.imgs=imgs;}publicStringgetTitle(){返回标题;}publicStringgetContent(){returnvideoUrl;}publicStringgetImgs(){返回图像;}@OverridepublicStringtoString(){return"ArticleMemento{"+"title='"+title+'\''+",content='"+videoUrl+'\''+",imgs='"+imgs+'\''+'}';}}发起者角色(编辑草稿):在基础对象之上,添加保存和撤销操作。可以看到和我们定义的成品图一样,只是增加了saveToMemento()方法和undoFromMemento()方法,用于保存和撤销。/***发起人(草稿)*@authortcy*@Date16-09-2022*/publicclassEditor{privateStringtitle;私有字符串videoUrl;私有字符串imgs;publicEditor(Stringtitle,StringvideoUrl,Stringimgs){this.title=title;this.videoUrl=videoUrl;这个.imgs=imgs;}publicStringgetTitle(){返回标题;}publicStringgetContent(){returnvideoUrl;}publicStringgetImgs(){返回图像;}publicvoidsetTitle(Stringtitle){this.title=title;}publicvoidsetContent(Stringcontent){this.videoUrl=content;}publicvoidsetImgs(Stringimgs){this.imgs=imgs;}/***保存到备忘录*@return*/publicVideoMementosaveToMemento(){VideoMementoarticleMemento=newVideoMemento(this.title,this.videoUrl,this.imgs);返回文章纪念品;}/***从备忘记录恢复*@paramarticleMemento*/publicvoidundoFromMemento(VideoMementoarticleMemento){this.title=articleMemento.getTitle();this.videoUrl=articleMemento.getContent();this.imgs=articleMemento.getImgs();}@OverridepublicStringtoString(){return"Editor{"+"title='"+title+'\''+",content='"+videoUrl+'\''+",imgs='"+imgs+'\''+'}';}}Administrator角色(草稿箱):包含一个栈,用于存放完成的草稿,利用栈的先进后出特性实现渐进式撤销/***Manager(草稿箱)*@authortcy*@Date16-09-2022*/publicclassCaretaker{privatefinalStack
