设计模式之(十八)备忘录模式(memento)
2011-03-12 09:41
435 查看
一、模式定义:
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存前的状态。
二、模式解说
在程序运行过程中,某些对象的状态处在转换过程中,可能由于某种原因需要保存此时对象的状态,以便程序运行到某个特定阶段,需要恢复到对象之前处于某个点时的状态。如果使用一些公有接口让其它对象来得到对象的状态,便会暴露对象的实现细节。
三、结构图
1) 备忘录(Memento)角色:备忘录角色存储“备忘发起角色”的内部状态。“备忘发起角色”根据需要决定备忘录角色存储“备忘发起角色”的哪些内部状态。为了防止“备忘发起角色”以外的其他对象访问备忘录。备忘录实际上有两个接口,“备忘录管理者角色”只能看到备忘录提供的窄接口——对于备忘录角色中存放的属性是不可见的。“备忘发起角色”则能够看到一个宽接口——能够得到自己放入备忘录角色中属性。
2) 备忘发起(Originator)角色:“备忘发起角色”创建一个备忘录,用以记录当前时刻它的内部状态。在需要时使用备忘录恢复内部状态。
3) 备忘录管理者(Caretaker)角色:负责保存好备忘录。不能对备忘录的内容进行操作或检查。
四、一个例子
输出结果:
当前系统处于好的状态
当前系统处于坏的状态
当前系统处于好的状态
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样就可以将该对象恢复到原先保存前的状态。
二、模式解说
在程序运行过程中,某些对象的状态处在转换过程中,可能由于某种原因需要保存此时对象的状态,以便程序运行到某个特定阶段,需要恢复到对象之前处于某个点时的状态。如果使用一些公有接口让其它对象来得到对象的状态,便会暴露对象的实现细节。
三、结构图
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()); } }
输出结果:
当前系统处于好的状态
当前系统处于坏的状态
当前系统处于好的状态
相关文章推荐
- 设计模式(十八)----- 备忘录模式(Memento)----(JAVA版)
- java设计模式(十八)——备忘录模式(Memento)
- php设计模式 Memento (备忘录模式)
- 【设计模式学习笔记十九】【行为模式】【备忘录模式(Memento)】
- 设计模式 - 备忘录模式(Memento)
- 23种设计模式之备忘录模式(Memento)
- 【Unity与23种设计模式】备忘录模式(Memento)
- 设计模式之:备忘录模式(Memento)
- 设计模式(十八)-备忘录模式(Memento Pattern)——保存对象状态
- 设计模式(15)-备忘录模式(Memento)
- 23设计模式之备忘录模式(Memento)
- 设计模式之十四:备忘录模式(Memento)
- JAVA设计模式(20):行为型-备忘录模式(Memento)
- java设计模式十六--Memento(备忘录模式)
- 设计模式 备忘录模式(Memento)
- Java设计模式之备忘录模式(Memento模式)介绍
- 设计模式--备忘录模式(Memento)
- 【设计模式 - 18】之备忘录模式(Memento)
- Java开发中的23种设计模式详解----备忘录模式(Memento)
- 设计模式之备忘录模式(Memento)