应用场景
备忘录模式,英文名Memento Pattern
该模式将对象状态封装为一个对象,再通过一个状态管理器对象将状态保存起来,这样就可以实现状态还原功能
该模式主要用于状态回滚的业务场景
代码实现
public class State {
String attribute1;
String attribute2;
String attribute3;
}
public class Saver {
LinkedList states = new LinkedList();
public State getLatestState() {
return states.getLast();
}
public void saveState(State state) {
states.addLast(state);
}
}
public class Subject {
State state;
public State currentState() {
return state;
}
public void setState(State state) {
this.state = state;
}
}
public class APP {
public static void main(String... args) {
Subject subject = new Subject();
Saver saver = new Saver();
State rollbackState = saver.getLatestState();
subject.setState(rollbackState);
saver.saveState(rollbackState);
}
}
模式扩展
上面的代码是一种标准实现方式,在实际应用中,我们并不一定要严格按照这种方式来做
这里列举一种变形模式
- 状态发生变更时,不创建新的状态对象,而是直接通过clone进行内存拷贝,创建一个新的对象,直接用新的对象来代替新的状态
- 通过List保存每个变更点的对象,需要回滚时,直接取出当时的对象来使用即可
- 如果有额外的状态描述信息需要记录,可以再增加一个Map,来记录每个变更点的状态描述
这个代码比较简单,就没必要再列举出来了