【大话设计模式】——备忘录 VS 命令

学行为型模式的时候,觉得备忘录模式与命令模式差不多,今天就将两者进行对比,加深一下印象。

一、介绍

1、备忘录模式

(1)Memento:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将对象恢复到原先保存的状态。

(2)类图

(3)个人理解

我们日常生活中的备忘录,就是保存自己的记事,下次看的时候能够唤起当时的记忆。这不就和这个模式有点相似嘛,用文字来记录我们当时的心情状态等,用手机将此状态保存到记事本里。

这里的主人公,就相当于备忘录模式中的发起人(Originator),而记事本就相当于备忘录(Memento),用来存储当时的记忆,而我们的手机就是用来保存状态的,相当于(caretaker)。

(4)优缺点

优点:避免暴露内部状态,客户端不需要知道具体的状态是什么,能够在需要时恢复到先前的状态,例如我们的备份系统。

缺点:代价高,如果需要创建备忘录时存储大量的数据,或者是频繁的创建和恢复,会导致非常大的开销。

2、命令模式

(1)Command:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作。

(2)类图

(3)个人理解:

门店卖烤肉串相对于摆摊来说,命令请求者与命令执行者的耦合性降低,并且利于添加新的命令,对命令进行撤销和重做等。

(4)优缺点

优点:降低了命令请求者与命令执行者的耦合性;灵活添加新命令,并设计组合命令;允许撤销和重做;

缺点:如果有过多的命令,就会导致系统中有过多的具体命令类,影响使用。

二、对比

1、相同点

(1)从类型上说,二者都是行为型模式,描述类和对象如何交互以及如何分配职责,用合理的方法处理。

(2)从功能上说,二者都有撤销的功能。

2、不同点

撤销功能的侧重不同,命令模式主要是对当前请求的修改,而备忘录模式主要是针对状态的恢复。

三、总结

通过对两个模式的比较,清楚了二者的区别,但是二者联系起来就更好了,如果在一个系统中需要对命令实现撤销功能,那就加上备忘录模式,用备忘录模式来储存可撤销操作内容的状态。

四、感受

用对比的方法来学习更能够调动自己,让自己想起来了一些有趣的生活往事。虽然这些模式理解,具体怎么用什么的还不怎么清楚,但是从心态上就已经发生了改变,学着学着就有了动力。不管现在理解的对不对,总之,以后会有更深刻的理解的。

时间: 2024-10-11 03:54:48

【大话设计模式】——备忘录 VS 命令的相关文章

大话设计模式—备忘录模式

备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象.备忘录模式属于行为型模式.所谓备忘录模式就是在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态.很多时候我们总是需要记录一个对象的内部状态,这样做的目的就是为了允许用户取消不确定或者错误的操作,能够恢复到他原先的状态,使得他有"后悔药"可吃. 大话设计模式中程杰老师给出的定义是,备忘录模式:在不破坏封装性的前提下,捕获一个对象的内

大话设计模式---备忘录模式

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. Memento模式比较适用于功能比较复杂的,但需要维护或记录属性历史的类,或者需要保存的属性只是众多属性中的一小部分时,Originator可以根据保存的Memento信息还原到前一状态.

【大话设计模式】设计模式系统学习大合集

转载请注明出处:http://blog.csdn.net/column/details/designpatternbylmb.html 为了方便各位网友学习以及方便自己复习之用,将设计模式的系列内容按照由浅入深的学习顺序总结如下,点击相应的标题即可跳转到对应的文章. 大话设计模式-工厂模式 大话设计模式-单例模式 大话设计模式-原型模式 深复制VS浅复制(MemberwiseClone方法介绍) 大话设计模式-代理模式 大话设计模式-中介者模式 大话设计模式-策略模式 大话设计模式-装饰模式 大

大话设计模式_备忘录模式(Java代码)

备忘录模式:在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态.这样以后就可将该对象恢复到原先保存的状态. 简单描述:一个Memento类,代表Originator中要备份的属性.Originator负责生成备份和还原备份,CareTaker负责存储备份 大话设计模式中的截图: 例子代码: Memento类: 1 package com.longsheng.memento; 2 3 public class Memento { 4 5 private String sta

大话设计模式_命令模式(Java代码)

命令模式:将一个请求封装成一个对象,从而使你可用不同的请求对客户进行参数化:对请求排队或记录请求日记,以及支持可撤销的操作. 简单描述:1个Receiver,知道如何执行命令.1个抽象命令,持有一个Receiver的引用,命令的执行则调用Receiver的对应方法(具体命令具体调用相应的方法).1个Invoker,只有命令的引用(可以是一个或多个),接收命令,并且执行命令的执行方法.客户端知道Receiver.生成命令给Invoker,由Invoker去调用命令自己的执行方法 大话设计模式中的截

java 之 备忘录模式(大话设计模式)

备忘录模式,给笔者的感觉,我们在实际开发中很少用到,至少笔者是没用到过.一般在游戏后台开发应该会经常用到吧!当然这只是 笔者的推断.先看下类图 大话设计模式-类图 再继续看下Demo吧 /** * 需要保存的进度信息类 */ public class RoleSateMemento{ private Integer atk; private Integer vit; private Integer attack; public RoleSateMemento(Integer atk, Integ

java 之 命令模式(大话设计模式)

命令模式,笔者一直以为当我们开发的过程中基本上很难用到,直到维护阶段或者重构阶段,我们会发现有些撤销命令和追加命令比较频繁时,自然而然就用到命令模式. 先看下类图 大话设计模式-类图 简单说下类图,最开始笔者看大话设计模式的时候也不是很喜欢看类图,主要原因是看不懂,后来当笔者第一次看完设计模式后,才真正意义上的理解类图. 在现在的工作中笔者查看设计模式时,基本上都是直接看类图,不会再去看demo.所以在这里笔者鼓励大家多看类图,并明白类图的意义,也不用过于刻意去看, 当大家明白一个设计模式后,再

大话设计模式读书笔记--设计模式总结

前言 大话设计模式看了两遍,之前看过一遍,理解的不深刻, 这次用了一个月多点的时间再次温习,利用下班后的时间回来学习,把学习心得记录下来,加深了对面向对象的理解 之前是看到一个需求搞清楚业务流程之后立刻就去做了,很少从设计层面的角度考虑,现在在开发程序时,开始有了设计的思想,也有了达到可维护,可复用,可扩展目的具体的实现方法 每当看到经过优化代码的效果时,就想起一句话:精彩的代码是如何想出来的,比看到精彩的代码更加令人兴奋 下面是用自己的话进行的总结,以便加深记忆和理解 创建型 抽象工厂 定义:

大话设计模式宏观把控

大话设计模式是我们现在学习的一个重头戏--本来看完C#视频之后,什么都不懂,但看了设计模式书的附录之后,真的感觉瞬间柳暗花明的赶脚呀!现在让我们先来全局的看一下这本书-- 本书通过一些幽默的小例子,以大鸟和小菜对话的方式,主要讲了模式和原则,不得不用一句俗语说:真是生动形象呀! 我把这些模式根据其特点,分成了创建型模式.结构型模式和行为型模式. 模式: 1.策略模式(Strategy):义了算法家族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化,不会影响到使用算法的客户.(商场打折促

大话设计模式总结(28种设计模式定义+简单理解)

大话设计模式这本书写的非常有创意,非常适合我这种新手.用了大约两个星期的时间看完了这本书,代码全部都敲了一遍,虽然没有一点基础,但是还是领略到了面向对象的威力.看完之后再也不想使用面向过程的语言了,比如VB,想当初我也是VB狂热者,但是现在我几乎不想再使用了.现在只想着写点什么用上它几种设计模式. 可能是第一次接触这些东西,有些感觉看懂了,但是很难应用到实际编程中:有些感觉没看懂,但是还能说出那么点东西来.听七期学长说他们当初看了两遍,要求能背着写出代码,不知道这次我们八期要求怎么这么低,我只看