简介
备忘录模式是一种行为模式,该模式用于保存对象当前状态,并且在之后可以再次恢复到此状态。备忘录模式实现的方式需要保证被保存的对象状态不能被对象从外部访问,目的是为了保护好被保存的这些对象状态的完整性以及内部实现不向外暴露。
定义
在不破坏封装的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态,这样,以后就可将该对象恢复到原先的状态。
关键点
一个原始数据对象,负责创建一个备忘录,可以记录、恢复自身的内部状态,同时可以根据需要决定存储自身的哪些状态。
一个备忘录角色,用于存储原始数据对象的内部状态,并且防止原始数据对象以外的对象访问备忘录。
一个备忘录管理者角色,负责存储备忘录,不能对备忘录的内容进行操作和访问,只能够将备忘录传递给其他对象
实现
/**
* 输入框状态进行存储
*/
public class NoteEditText {
private String text;
private int cursor;
/**
* 创建备忘录角色—负责存储需要保存的状态
*/
public Memoto createMemoto() {
Memoto memoto = new Memoto();
memoto.text = text;
memoto.cursor = cursor;
return memoto;
}
/**
* 从备忘录中恢复数据
*/
public void restore(Memoto memoto) {
this.text = memoto.text;
this.cursor = memoto.cursor;
}
}
/**
* 备忘录角色
*/
public class Memoto {
public String text;
public int cursor;
}
/**
* 备忘录管理者角色—对外提供备忘录
*/
public class MemotoManager {
private Memoto memoto;
/**
* 存储一个状态信息
*/
public void setMemoto(Memoto memoto) {
this.memoto = memoto;
}
/**
* 对外提供存储的备忘录信息
*/
public Memoto getMemoto() {
return memoto;
}
}
NoteEditText noteEditText = new NoteEditText();
MemotoManager memotoManager = new MemotoManager();
//需要存储的时候
memotoManager.setMemoto(noteEditText.createMemoto());
//需要回复的时候
noteEditText.restore(memotoManager.getMemoto());
小结
优点
给用户提供了一种可以恢复状态的机制,可以使用户能够比较方便地回到某个历史状态
实现了信息的封装,使得用户不需要关心状态的保存细节
缺点
消耗资源,如果类的成员变量过多,势必会导致占用较大资源,而且每一次保存都会消耗一定的资源