设计模式 18:备忘录模式
定义与目的
- 定义:备忘录模式在不破坏封装性的前提下,捕获一个对象的内部状态,并在该对象之外保存这个状态。这样以后就可以将该对象恢复到原先保存的状态。
- 目的:该模式的主要目的是允许对象在其内部状态改变后可以恢复到某个历史状态,而不会暴露对象的内部状态。
实现示例
假设我们有一个文档编辑器,需要支持撤销功能。我们可以使用备忘录模式来实现这个需求。
// 备忘录接口
interface Memento {
String getContent();
}
// 具体备忘录 - 文档备忘录
class DocumentMemento implements Memento {
private String content;
public DocumentMemento(String content) {
this.content = content;
}
@Override
public String getContent() {
return content;
}
}
// 发起人 - 文档
class Document {
private String content;
public Document(String content) {
this.content = content;
}
public String getContent() {
return content;
}
public void setContent(String content) {
this.content = content;
}
public Memento save() {
return new DocumentMemento(content);
}
public void restore(Memento memento) {
content = memento.getContent();
}
}
// 客户端代码
public class Client {
public static void main(String[] args) {
Document document = new Document("Initial text.");
System.out.println("Original document: " + document.getContent());
Memento memento = document.save();
document.setContent("Updated text.");
System.out.println("Updated document: " + document.getContent());
document.restore(memento);
System.out.println("Restored document: " + document.getContent());
}
}
使用场景
- 当你需要为一个对象保存和恢复其内部状态时。
- 当你需要实现撤销功能时。
- 当你需要在不破坏封装性的前提下捕获一个对象的内部状态时。
备忘录模式通过在对象之外保存其内部状态,使得对象可以在任何时候恢复到之前的状态。这对于需要实现撤销功能或保存对象状态的场景非常有用。
小结
备忘录模式是一种常用的行为型模式,它可以帮助你在不破坏封装性的前提下捕获一个对象的内部状态,并在该对象之外保存这个状态。这对于需要实现撤销功能或保存对象状态的场景非常有用。