备忘录模式(Memento Pattern)也被称为快照模式(Snapshot Pattern)、Token 模式(Token Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。 备忘录模式 会保存一个对象的某个状态,以便在适当的时候恢复对象。 备忘录模式 在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。 ~ 本篇文章内容包括:关于备忘录模式、备忘录模式 Demo(伪代码)
备忘录模式(Memento Pattern)也被称为快照模式(Snapshot Pattern)、Token 模式(Token Pattern),是在 GoF 23 种设计模式中定义了的行为型模式。
备忘录模式 会保存一个对象的某个状态,以便在适当的时候恢复对象。
备忘录模式 在不破坏封装的前提下,捕获一个对象的内部状态,并在对象之外保存这个状态。这样以后就可将该对象恢复到原先保存的状态。
备忘录模式主要包含以下 3 种角色:
# 备忘录模式的优点
# 备忘录模式的缺点:
# Originator 发起人角色
public class Originator {
/**
* 内部状态
*/
private String state;
public String getState() {
return this.state;
}
public void setState(String state) {
this.state = state;
}
/**
* 创建一个备忘录
* @return Memento
*/
public Memento createMemento() {
return new Memento(this.state);
}
/**
* 从备忘录恢复
* @param memento Memento
*/
public void restoreMemento(Memento memento) {
this.setState(memento.getState());
}
}
# Memento 备忘录角色
public class Memento {
private String state;
public Memento(String state){
this.state = state;
}
public String getState() {
return this.state;
}
public void setState(String state) {
this.state = state;
}
}
# Caretaker 备忘录管理员角色
public class Caretaker {
/**
* 备忘录对象
*/
private Memento memento;
public Memento getMemento() {
return this.memento;
}
public void storeMemento(Memento memento) {
this.memento = memento;
}
}
public class Client {
public static void main(String[] args) {
//来一个发起人
Originator originator = new Originator();
originator.setState("状态1");
System.out.println(originator.getState());
//来一个备忘录管理员
Caretaker caretaker = new Caretaker();
//管理员存储发起人的备忘录
caretaker.storeMemento(originator.createMemento());
originator.setState("状态2");
System.out.println(originator.getState());
//管理员存储发起人的备忘录
caretaker.storeMemento(originator.createMemento());
originator.setState("状态3");
System.out.println(originator.getState());
//发起人从管理员获取备忘录进行回滚
originator.restoreMemento(caretaker.getMemento());
System.out.println(originator.getState());
}
}