学行为型模式的时候,觉得备忘录模式与命令模式差不多,今天就将两者进行对比,加深一下印象。
一、介绍
1、备忘录模式
(1)Memento:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。
(2)类图
(3)个人理解
我们日常生活中的备忘录,就是保存自己的记事,下次看的时候能够唤起当时的记忆。这不就和这个模式有点相似嘛,用文字来记录我们当时的心情状态等,用手机将此状态保存到记事本里。
这里的主人公,就相当于备忘录模式中的发起人(Originator),而记事本就相当于备忘录(Memento),用来存储当时的记忆,而我们的手机就是用来保存状态的,相当于(caretaker)。
(4)优缺点
优点:避免暴露内部状态,客户端不需要知道具体的状态是什么,能够在需要时恢复到先前的状态,例如我们的备份系统。
缺点:代价高,如果需要创建备忘录时存储大量的数据,或者是频繁的创建和恢复,会导致非常大的开销。
2、命令模式
(1)Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。
(2)类图
(3)个人理解:
门店卖烤肉串相对于摆摊来说,命令请求者与命令执行者的耦合性降低,并且利于添加新的命令,对命令进行撤销和重做等。
(4)优缺点
优点:降低了命令请求者与命令执行者的耦合性;灵活添加新命令,并设计组合命令;允许撤销和重做;
缺点:如果有过多的命令,就会导致系统中有过多的具体命令类,影响使用。
二、对比
1、相同点
(1)从类型上说,二者都是行为型模式,描述类和对象如何交互以及如何分配职责,用合理的方法处理。
(2)从功能上说,二者都有撤销的功能。
2、不同点
撤销功能的侧重不同,命令模式主要是对当前请求的修改,而备忘录模式主要是针对状态的恢复。
三、总结
通过对两个模式的比较,清楚了二者的区别,但是二者联系起来就更好了,如果在一个系统中需要对命令实现撤销功能,那就加上备忘录模式,用备忘录模式来储存可撤销操作内容的状态。
四、感受
用对比的方法来学习更能够调动自己,让自己想起来了一些有趣的生活往事。虽然这些模式理解,具体怎么用什么的还不怎么清楚,但是从心态上就已经发生了改变,学着学着就有了动力。不管现在理解的对不对,总之,以后会有更深刻的理解的。