设计模式--备忘录模式
2017-12-28 17:45
162 查看
Java工程源码
类图
定义
在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。
这样以后就 可将该对象恢复到原先保存的状态
使用场景
- 需要保存和恢复数据的相关状态场景
- 提供一个可回滚操作
- 需要监控的副本场景中
- 数据库连接的事务管理就是用的备忘录模式
注意事项
备忘录的性能:不要在频繁建立备份的场景中使用备忘录模式以免控制不了备忘录建立的对象数量,而且大对象的简历需要资源
备忘录类
发起人角色
备忘录管理者
场景类
运行结果
类图
定义
在不破坏封装性的前提下,捕获一个对象内部状态,并在该对象之外保存这个状态。
这样以后就 可将该对象恢复到原先保存的状态
使用场景
- 需要保存和恢复数据的相关状态场景
- 提供一个可回滚操作
- 需要监控的副本场景中
- 数据库连接的事务管理就是用的备忘录模式
注意事项
备忘录的性能:不要在频繁建立备份的场景中使用备忘录模式以免控制不了备忘录建立的对象数量,而且大对象的简历需要资源
备忘录类
public class Memento { /** * 备忘录状态 */ private String state = ""; public Memento(String _state) { this.state = _state; } /** * 获取状态 * * @return 状态 */ public String getState() { return state; } /** * 设置状态 * * @param state 状态 */ public void setState(String state) { this.state = state; } }
发起人角色
public class Originator { /** * 内部状态 */ private String state = "init"; /** * 获取状态 * * @return 状态 */ public String getState() { return state; } /** * 设置状态 * * @param state 状态 */ public void setState(String state) { this.state = state; } /** * 创建一个备忘录 * * @return 备忘录 */ public Memento createMemento() { return new Memento(state); } /** * 回复一个备忘录 * * @param memento 备忘录 */ public void restoreMemento(Memento memento) { setState(memento.getState()); } }
备忘录管理者
public class Caretaker { /** * 备忘录对象 */ private Memento memento; /** * 获取备忘录对象 * * @return 备忘录对象 */ public Memento getMemento() { return memento; } /** * 设置备忘录对象 * * @param memento 备忘录对象 */ public void setMemento(Memento memento) { this.memento = memento; } }
场景类
public class Client { public static void main(String[] args) { // 定义发起人 Originator originator = new Originator(); // 定义备忘录管理者 Caretaker caretaker = new Caretaker(); // 创建一个备忘录 caretaker.setMemento(originator.createMemento()); // 读取备忘录内容 System.out.println("备忘录状态:" + caretaker.getMemento().getState()); System.out.println("发起人状态:" + originator.getState()); // 改变发起人内容 originator.setState("new state"); // 读取发起人内容 System.out.println("发起人状态:" + originator.getState()); // 恢复一个备忘录 originator.restoreMemento(caretaker.getMemento()); System.out.println("发起人状态:" + originator.getState()); } }
运行结果
备忘录状态:init 发起人状态:init 发起人状态:new state 发起人状态:init
相关文章推荐
- 设计模式之备忘录模式
- [设计模式]备忘录模式
- 23种设计模式之备忘录模式
- 备忘录模式 - 设计模式学习
- NET中的备忘录设计模式——整合完整例子
- 【GOF23设计模式】备忘录模式
- 研磨设计模式 之 备忘录模式(Memento)1——跟着cc学设计系列
- C++设计模式-Memento备忘录模式
- Java设计模式_行为型_备忘录模式_大话西游之月光宝盒
- 设计模式之备忘录模式
- java设计模式(行为型)之备忘录模式
- 【iOS设计模式】---- 备忘录模式,命令模式
- 设计模式-----备忘录模式
- Python设计模式(二十一)【备忘录模式】
- Java设计模式之备忘录模式
- 设计模式学习-每日一记(19.备忘录模式)
- 设计模式 26 备忘录模式
- 设计模式:备忘录模式
- 【java设计模式】备忘录模式
- 【设计模式】如果再回到从前 ---- 备忘录模式