备忘录模式
10103421 姚浩
备忘录模式
(1)模式动机与定义
(2)模式结构与分析
(3)模式效果与应用
(4)模式扩展
备忘录模式的定义
备忘录模式(Memento Pattern)又叫做快照模式(Snapshot Pattern)或Token模式,是GoF的23种设计模式之一,属于行为模式。
备忘录模式(Memento Pattern):在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态。它是一种对象行为型模式,其别名为Token。
Memento Pattern: Without violating encapsulation, capture and externalize an object's internal state so that the object can be restored to this state later.
Frequency of use: medium low
涉及角色:
(发起人):负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。Originator可以根据需要决定Memento存储自己的哪些内部状态。
(备忘录):负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,允许它访问返回到先前状态所需要的所有数据。
(管理者):负责备忘录Memento,不能对Memento的内容进行访问或者操作。
模式动机
为了使软件的使用更加人性化,对于误操作,我们需要提供一种类似“后悔药”的机制,让软件系统可以回到误操作前的状态,因此需要保存用户每一次操作时系统的状态,一旦出现误操作,可以把存储的历史状态取出即可回到之前的状态。
现在大多数软件都有撤销(Undo)的功能,快捷键一般都是Ctrl+Z,目的就是为了解决这个后悔的问题。
我们在很多的时候做错了事情需要弥补过错,我们就会想到如果有“后悔药”就好了,这时候这个备忘录模式的强大功能就会让我们
“呵呵呵”解决了。
在应用软件的开发过程中,很多时候我们都需要记录一个对象的内部状态。
在具体实现过程中,为了允许用户取消不确定的操作或从错误中恢复过来,需要实现备份点和撤销机制,而要实现这些机制,必须事先将状态信息保存在某处,这样才能将对象恢复到它们原先的状态。
备忘录模式是一种给我们的软件提供后悔药的机制,通过它可以使系统恢复到某一特定的历史状态。
备忘录模式的结构图
模式分析
为了实现对备忘录对象的封装,需要对备忘录的调用进行控制:
对于原发器而言,它可以调用备忘录的所有信息,允许原发器访问返回到先前状态所需的所有数据;
对于负责人而言,只负责备忘录的保存并将备忘录传递给其他对象;
对于其他对象而言,只需要从负责人处取出备忘录对象并将原发器对象的状态恢复,而无须关心备忘录的保存细节。
理想的情况是只允许生成该备忘录的那个原发器访问备忘录的内部状态。
典型的发起人类代码:
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 ;
}
}
典型的备忘录类代码
package ;
class Memento {
private String state;
public Memento(Originator o){
state = ;
}
public void setState(String state)
{
=state;
}
public String getState()
{
return ;
}
}
备忘录模式 来自淘豆网m.daumloan.com转载请标明出处.