1 / 26
文档名称:

软件设计模式:SDP04-06备忘录模式.ppt

格式:ppt   大小:1,359KB   页数:26页
下载后只包含 1 个 PPT 格式的文档,没有任何的图纸或源代码,查看文件列表

如果您已付费下载过本站文档,您可以点这里二次下载

分享

预览

软件设计模式:SDP04-06备忘录模式.ppt

上传人:窝窝爱蛋蛋 2021/12/8 文件大小:1.33 MB

下载得到文件列表

软件设计模式:SDP04-06备忘录模式.ppt

相关文档

文档介绍

文档介绍:备忘录模式
备忘录模式
模式动机与定义
模式结构与分析
模式实例与解析
模式效果与应用
模式扩展
备忘录模式
模式动机
为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到之前的状态。
现在大多数软件都有撤销(Undo)的功能,快捷键一般都是Ctrl+Z,目的就是为了解决这个后悔的问题。
备忘录模式是一种给我们的软件提供后悔药的机制,通过它可以使系统恢复到某一特定的历史状态。
备忘录模式
模式动机
备忘录模式
模式定义
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名又叫做Token模式或快照模式(Snapshot Pattern) 。
备忘录模式的核心是备忘录类以及用于管理备忘录的负责人类的设计,其结构如下图所示。
备忘录模式
模式结构
备忘录模式
备忘录模式包含如下角色
Originator:原发器,它是一个普通类,可以创建一个备忘录,并存储它的当前内部状态,也可以使用备忘录来恢复其内部状态,一般将需要保存内部状态的类设计为原发器。
Memento:备忘录,存储原发器的内部状态,根据原发器来决定保存哪些内部状态。备忘录的设计一般可以参考原发器的设计,根据实际需要确定备忘录类中的属性。需要注意的是,除了原发器本身与负责人类之外,备忘录对象不能直接供其他类使用,原发器的设计在不同的编程语言中实现机制会有所不同。
备忘录模式
备忘录模式包含如下角色
Caretaker:负责人又称为管理者,它负责保存备忘录,但是不能对备忘录的内容进行操作或检查。在负责人类中可以存储一个或多个备忘录对象,它只负责存储对象,而不能修改对象,也无须知道对象的实现细节。
理解备忘录模式并不难,但关键在于如何设计备忘录类和负责人类。由于在备忘录中存储的是原发器的中间状态,因此需要防止原发器以外的其他对象访问备忘录,特别是不允许其他对象来修改备忘录。
模式分析
使用备忘录模式时首先应该存在一个原发器类Originator,在真实业务中,原发器类是一个具体的业务类,它包含一些用于存储成员数据的属性,典型代码如下所示:
package ;
public class Originator {
private String state;
public Originator(){ }
// 创建一个备忘录对象
public Memento createMemento() {  return new Memento(this); }
// 根据备忘录对象恢复原发器状态
public void restoreMemento(Memento m) { state = ; }
public void setState(String state) { =state; }
public String getState() { return ; }
}
备忘录模式
模式分析
对于备忘录类Memento而言,它通常提供了与原发器相对应的属性(可以是全部,也可以是部分)用于存储原发器的状态,典型的备忘录类设计代码如下:
package ;
class Memento {
private String state;
public Memento(Originator o) {
    state = ();
}
public void setState(String state) {
=state;
}
public String getState() {
return ;
}
}
备忘录模式
模式分析
在设计备忘录类时需要考虑其封装性,除了Originator类,不允许其他类来调用备忘录类Memento的构造函数与相关方法,如果不考虑封装性,允许其他类调用setState()等方法,将导致在备忘录中保存的历史状态发生改变,通过撤销操作所恢复的状态就不再是