备忘录模式又叫快照模式或者Token模式 是对象的行为模式
备忘录模式是备忘录对象保存了发起者对象,在发起者对象变化之后,可以恢复变化之前的状态。
1,备忘录模式的角色:
发起者角色:负责创建备忘录角色,且将当前的对象保存在备忘录对象中去。。
备忘录角色:保存发起者角色的状态。
负责人角色:保存备忘录对象。不负责备忘录角色的内容。
2,模式实例
现在以我们在读书的时候,老是经常用黑板写字。经常想恢复已经被擦掉的文字。以现在以老是想恢复黑板上已经被擦掉的文字。这样一个场景。很适合使用备忘录模式。
首先对角色进行划分。
老师是发起人角色,粉笔是备忘录角色。黑板是是负责人角色。负责保存备忘录对象。
如下:
//老师是发起人角色。首先要创建备忘录对象
public interface Teacher{
//老是具有写的功能
public void write();
//创建备忘录模式
public Chalk createMemo();
//恢复已经擦除的内容
public void restoreContent(Chalk chalk);
//设置黑板内容
public void setContent(String content);
}
//老师的具体实现类
public class TeacherImpl implements Teacher{
//需要备份的内容
private String content;
//构造子
public TeacherImpl(String content){
this.content=content;
}
//黑板上显示的内容
public void write(){
System.out.println("当前要在黑板上显示的内容:"+content)
}
//创建备份内容
public Chalk createMemo(){
//创建备份
return new Chalk(content);
}
//恢复内容
public void restoreContent(){
this.content=chalk.getContent;
}
//重新设置黑板的内容
public void setContent(String content){
this.content=content;
}
}
//备忘录对象 粉笔。负责备忘的内容和状态。
public class Chalk{
//内容 需要恢复的内容
private String content;
//构造子
public chalk(String content);
//设置内容
public void setContent(String content){
this.content=content;
}
//得到内容
public void getContent(){
return content;
}
}
//提供的黑板接口专门保存备份角色。
public interface Blockboard{
//保存备份角色
public void saveMemo(Chalk chalk)
//得备份角色
public Chalk getMemo();
}
//负责人角色的具体实现类
public class BlockBoardImpl implements Blockboard{
//备份内容
private Chalk chalk;
//保存备份角色
public void saveMemo(Chalk chalk){
this.chalk = chalk;
}
//得到备份内容
public Chalk getMemo(){
return chalk;
}
}
//客户端调用
public class Client{
public static void main(String args[]){
Teacher teacher = new TeacherImpl("这道世界难题的结果是5");
//创建备份对象
Chalk chalk=teacher.createMemo();
//管理和保存备份对象。
Blockboard block = new BlockboardImpl();
block.saveMemo(chalk);
techer.write();
//改变黑板内容
teacher.setContent("这个世界的没有什么难题!");
teacher.write();
//恢复黑板的中内容
teacher.restoreContent();
teacher.write();
}
}
打印的结果:
这道世界难题的结果是5;
这个世界的没有什么难题!
这道世界难题的结果是5;
3:应用场景:
A,
4:优点和缺点:
优点:
A、有时一些发起人对象的内部信息必须保存在发起人对象以外的地方,但是必须要由发起人对象自己读取,这时,
使用备忘录模式可以把复杂的发起人内部信息对其他的对象屏蔽起来,从而可以恰当地保持封装的边界。
B、本模式简化了发起人类。发起人不再需要管理和保存其内部状态的一个个版本,客户端可以自行管理他们所需
要的这些状态的版本。
缺点:
A、 如果发起人角色的状态需要完整地存储到备忘录对象中,那么在资源消耗上面备忘录对象会很昂贵。
B、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法
提醒用户一个操作是否很昂贵
备忘录模式的核心:维护一个备忘录角色来保存要恢复的数据。
发表评论
-
调停者,观察者,门面模式
2011-11-15 19:38 1218调停者(Mediator)模式 ... -
访问者模式
2011-08-26 10:06 592访问者模式 -
状态模式
2011-08-26 10:06 458状态模式 -
命令模式
2011-08-25 14:40 667命令模式核心是封装命令类(请求类),每一个命令类作单独的类,分 ... -
责任链模式
2011-08-24 21:40 648责任链模式是一种行为模式。多个处理类组成一个责任链,责任链处理 ... -
模板方法模式
2011-08-24 13:35 628这个模式相对来说也比较简单。 -
策略模式
2011-08-23 16:02 638策略模式是比较常用的一种模式.封装不算法。每一个算法封装在不同 ... -
不变模式
2011-08-23 15:42 653不变模式比较简单,一般设计成一个类或者一个继承等级结构。 不 ... -
桥梁设计模式(柄体设计模式)
2011-08-22 23:51 685桥梁设计是将抽象化和实现化分离。抽象化就是指模型的抽象化,是实 ... -
适配器模式(变压器模式)
2011-08-22 21:42 862为什么要 用适配器模式。就是把两个完全不关联或者不相同的类纠合 ... -
享元模式
2011-08-18 08:53 656享元模式的角色划分: 1,抽象享元角色:享元角色需要实现的公 ... -
装饰器模式(包裹模式)
2011-08-16 09:58 668装饰器模式的形象理解油漆工刷油漆。油漆工是装饰器角色,被刷者是 ... -
组合设计模式(合成模式)
2011-08-14 23:35 798组合设计模式(部分-整体设计模式) 主要角色涉及三个 抽 ...
相关推荐
备忘录模式的示例代码和文档,学习备忘录模式的参考资料。
备忘录模式.rar备忘录模式.rar备忘录模式.rar
设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式 设计模式之备忘录模式
备忘录模式Demo
备忘录模式(Memento Pattern)保存一个对象的某个状态,以便在适当的时候恢复对象。备忘录模式属于行为型模式。 备忘录模式java demo
java设计模式-备忘录模式源代码, 源码中为设计模式的工程源文件,已经测试过,没有问题。
设计模式-备忘录模式(讲解及其实现代码)
C#备忘录模式 代码例子 写的比较乱,呵呵
设计模式之备忘录模式的Java版本实现和UML类设计图
本例包含备忘录模式的C#实现,及一个应用案例,加深理解与运用。
备忘录模式C++实现,若理解有误,请留言指出。
备忘录模式在不破坏封装的前提下,记录一个对象的内部状态,并在该对象之外保存这个状态,这样可以在以后将对象恢复到原先保存的状态,本例中设置历次成绩,并记录和保存,最后返回最好成绩
C#面向对象设计模式纵横谈(21):(行为型模式) Memento 备忘录模式
责任链模式 备忘录模式 单(双)链表 显示 "正在加载,请稍后……" 原理 1、责任链模式: * 责任连模式的结构 责任连模式的类图非常简单,它由一个抽象地处理类和它的一组实现类组成: * 抽象处理类:抽象处理类中...
备忘录模式 C++ 实现
在备忘录模式里,一个备忘录是一个对象,它存储另一个对象(备忘录的原发器)在某个瞬间的内部状态。备忘的目的就是为了以后在需要的时候,可以将原发器对象的状态恢复(undo/rollback)到备忘录所保存的状态。 备忘...
Android备忘录模式简单Demo,实现通过memoto备忘录实体,实现游戏存档和读档的功能简单模拟,便于理解备忘录模式.同步博文:http://blog.csdn.net/qq_28690547/article/details/50708415
设计模式之备忘录 和 状态模式精讲 19.1 场景问题 19.1.1 开发仿真系统 考虑这样一个仿真应用,功能是:模拟运行针对某个具体问题的多个解决方案,记录运行过程的各种数据,在模拟运行完成过后,好对这多个解决...