您的位置:首页 > 其它

设计模式之(十八)备忘录模式(memento)

2011-03-12 09:41 435 查看
一、模式定义:

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

二、模式解说

在程序运行过程中,某些对象的状态处在转换过程中,可能由于某种原因需要保存此时对象的状态,以便程序运行到某个特定阶段,需要恢复到对象之前处于某个点时的状态。如果使用一些公有接口让其它对象来得到对象的状态,便会暴露对象的实现细节。

三、结构图



1) 备忘录(Memento)角色:备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色”的哪些内部状态。为了防止“备忘发起角色”以外的其他对象访问备忘录。备忘录实际上有两个接口,“备忘录管理者角色”只能看到备忘录提供的窄接口——对于备忘录角色中存放的属性是不可见的。“备忘发起角色”则能够看到一个宽接口——能够得到自己放入备忘录角色中属性。

2) 备忘发起(Originator)角色:“备忘发起角色”创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。

3) 备忘录管理者(Caretaker)角色:负责保存好备忘录。不能对备忘录的内容进行操作或检查。

四、一个例子

//备忘录(Memento)角色
public class Memento
{
private String state;
public Memento(String state)
{
this.state = state;
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
}
}
//备忘录管理者(Caretaker)角色
public class User
{
private Memento memento;
public Memento retrieveMemento()
{ // 恢复系统
return this.memento;
}
public void saveMemento(Memento memento)
{ // 保存系统
this.memento = memento;
}
}
//备忘发起(Originator)角色
public class WindowsSystem
{
private String state;
public Memento createMemento()
{ // 创建系统备份
return new Memento(state);
}
public void restoreMemento(Memento m)
{ // 恢复系统
this.state = m.getState();
}
public String getState()
{
return state;
}
public void setState(String state)
{
this.state = state;
System.out.println("当前系统处于" + this.state);
}
}


public class Client
{
public static void main(String[] args)
{
WindowsSystem Winxp = new WindowsSystem(); // Winxp系统
User user = new User(); // 某一用户
Winxp.setState("好的状态"); // Winxp处于好的运行状态
user.saveMemento(Winxp.createMemento()); // 用户对系统进行备份,Winxp系统要产生备份文件
Winxp.setState("坏的状态"); // Winxp处于不好的运行状态
Winxp.restoreMemento(user.retrieveMemento()); // 用户发恢复命令,系统进行恢复
System.out.println("当前系统处于" + Winxp.getState());
}
}


输出结果:

当前系统处于好的状态

当前系统处于坏的状态

当前系统处于好的状态
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: