备忘录模式
1、定义
在不破坏封闭的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
2、结构图
- Originator(发起人):
负责创建一个备忘录Memento,用以记录当前时刻自身的内部状态,并可使用备忘录恢复内部状态。
Originator可以根据需要决定Memento存储自己的哪些内部状态。 - Memento(备忘录):
负责存储Originator对象的内部状态,并可以防止Originator以外的其他对象访问备忘录。备忘
录有两个接口:Caretaker只能看到备忘录的窄接口,他只能将备忘录传递给其他对象。Originator却可看到备忘录的宽接口,
允许它访问返回到先前状态所需要的所有数据。 - Caretaker(管理者):
负责备忘录Memento,不能对Memento的内容进行访问或者操作。
3、代码
(1)备忘录
public class Memento { public Memento(String status) { super(); this.status = status; } private String status; public String getStatus() { return status; } public void setStatus(String status) { this.status = status; } }
(2)管理者
public class CareTaker { private Memento memento; public void saveMemento(Memento memento){ this.memento = memento; } public Memento retrieveMemento(){ return this.memento; } }
(3)发起人
public class Originator { private String state; /** * 工厂方法,返回一个新的备忘录对象 */ public Memento createMemento(){ return new Memento(state); } /** * 将发起人恢复到备忘录对象所记载的状态 */ public void restoreMemento(Memento memento){ this.state = memento.getStatus(); } public String getState() { return state; } public void setState(String state) { this.state = state; System.out.println("当前状态:" + this.state); } }
(4)客户端
public class Client { public static void main(String[] args) { CareTaker careTaker = new CareTaker(); Originator originator = new Originator(); originator.setState("on"); careTaker.saveMemento(originator.createMemento()); originator.setState("off"); originator.restoreMemento(careTaker.retrieveMemento()); System.out.println("回复后state:"+originator.getState()); } }
(5)运行结果
当前状态:on 当前状态:off 回复后state:on
4、总结
- 有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,
使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。 - 本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需
要的这些状态的版本。 - 当发起人角色的状态改变的时候,有可能这个状态无效,这时候就可以使用暂时存储起来的备忘录将状态复原。
相关推荐
备忘录模式.rar备忘录模式.rar备忘录模式.rar
备忘录模式的示例代码和文档,学习备忘录模式的参考资料。
设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式
备忘录模式Demo
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 备忘录模式java demo
java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。
C#备忘录模式 代码例子 写的比较乱,呵呵
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
设计模式-备忘录模式(讲解及其实现代码)
设计模式之备忘录模式的Java版本实现和UML类设计图
本例包含备忘录模式的C#实现,及一个应用案例,加深理解与运用。
备忘录模式C++实现,若理解有误,请留言指出。
责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...
备忘录模式 C++ 实现
备忘录模式在不破坏封装的前提下,记录一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,本例中设置历次成绩,并记录和保存,最后返回最好成绩
ios平台下备忘录模式最初简代码讲解何为备忘录模式,相关博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html
设计模式专题之(十九)备忘录模式--设计模式备忘录模式示例代码(python--c++)
Android备忘录模式简单Demo,实现通过memoto备忘录实体,实现游戏存档和读档的功能简单模拟,便于理解备忘录模式.同步博文:http://blog.csdn.net/qq_28690547/article/details/50708415
设计模式之备忘录 和 状态模式精讲 19.1 场景问题 19.1.1 开发仿真系统 考虑这样一个仿真应用,功能是:模拟运行针对某个具体问题的多个解决方案,记录运行过程的各种数据,在模拟运行完成过后,好对这多个解决...
设计模式-备忘录模式