备忘录模式又叫快照模式或者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、当负责人角色将一个备忘录 存储起来的时候,负责人可能并不知道这个状态会占用多大的存储空间,从而无法
提醒用户一个操作是否很昂贵
备忘录模式的核心:维护一个备忘录角色来保存要恢复的数据。